Digamos que tengo una lista:
main_list = ['bacon', 'cheese', 'milk', 'cake', 'tomato']
y otra lista:
second_list = ['cheese', 'tomato']
y quiero eliminar todos los elementos que se encuentran en la segunda lista, de la lista principal?
Gracias de antemano
Adán
Si el orden no es importante puedes usar sets :
>>> main_array = ['bacon', 'cheese', 'milk', 'cake', 'tomato'] >>> second_array = ['cheese', 'tomato'] >>> set(main_array) & set(second_array) set(['tomato', 'cheese'])
Aquí usamos el operador de intersección, &
. Si solo quiere elementos que no se encuentran en su segunda lista, podemos usar la diferencia, -
:
>>> set(main_array) - set(second_array) set(['cake', 'bacon', 'milk'])
new_array = [x for x in main_array if x not in second_array]
Sin embargo, esto no es muy eficaz para listas grandes. Puede optimizar utilizando un conjunto para second_array
:
second_array = set(second_array) new_array = [x for x in main_array if x not in second_array]
Si el orden de los elementos no importa, puede usar un conjunto para ambas matrices:
new_array = list(set(main_array) - set(second_array))
main_array = set(['bacon', 'cheese', 'milk', 'cake', 'tomato']) second_array = (['cheese', 'tomato']) main_array.difference(second_array) >>> set(['bacon', 'cake', 'milk']) main_array.intersection(second_array) >>> set(['cheese', 'tomato'])
l = [u'SQOOP', u'SOLR', u'SLIDER', u'SFTP', u'PIG', u'NODEMANAGER', u'JSQSH', u'HCAT', u'HBASE_REGIONSERVER', u'GANGLIA_MONITOR', u'FLUME_HANDLER', u'DATANODE', u'BIGSQL_WORKER'] p = [u'SQOOP', u'SOLR', u'SLIDER', u'SFTP'] l = [i for i in l if i not in [j for j in p]] print l [u'PIG', u'NODEMANAGER', u'JSQSH', u'HCAT', u'HBASE_REGIONSERVER', u'GANGLIA_MONITOR', u'FLUME_HANDLER', u'DATANODE', u'BIGSQL_WORKER']