2012-05-12 17 views

Respuesta

7

Si la orden no es importante que se puede utilizar sets:

>>> main_array = ['bacon', 'cheese', 'milk', 'cake', 'tomato'] 
>>> second_array = ['cheese', 'tomato'] 
>>> set(main_array) & set(second_array) 
set(['tomato', 'cheese']) 

Aquí se utiliza el operador de intersección, &. En caso de que sólo quieren artículos que no se encuentran en su segunda lista, podemos utilizar la diferencia, -:

>>> set(main_array) - set(second_array) 
set(['cake', 'bacon', 'milk']) 
+0

Eso no funcionará si la orden se debe mantener. De lo contrario, esta es de hecho la mejor solución. Sin embargo, creo que quiere * eliminar * esos elementos, así que use '-' en lugar de' & '. – ThiefMaster

+1

@ThiefMaster - cierto, y no interpretó 'Quiero todos los elementos' bien! – fraxel

11
new_array = [x for x in main_array if x not in second_array] 

Sin embargo, esto no es de buen calidad para grandes listas. Usted puede optimizar mediante el uso de un conjunto de 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, se puede utilizar un conjunto de ambas matrices:

new_array = list(set(main_array) - set(second_array)) 
+0

Me encanta lo expresiva que es python :). Es como si estuvieras hablando inglés. – Vikas

+2

Buena respuesta, solo una pequeña adición: puede optimizar la variante que preserva la orden cambiando primero "second_array" en un conjunto: 'second_set = set (second_array); new_array = [x para x en main_array si x no está en second_set] ' – roskakori

2
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']) 
0
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'] 
Cuestiones relacionadas