2012-05-12 17 views

risposta

7

Se l'ordine non è importante che si può utilizzare sets:

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

Qui si usa l'operatore di intersezione, &. Se volete solo gli elementi che non si trovano nella seconda lista, possiamo usare la differenza, -:

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

Che non funzionerà se l'ordine dovrebbe essere mantenuto. Altrimenti questa è davvero la soluzione migliore. Tuttavia, penso che voglia rimuovere * quegli elementi in modo da usare '-' invece di' & '. – ThiefMaster

+1

@ThiefMaster - true, e non ha interpretato "Voglio tutti gli elementi", giusto! – fraxel

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

Tuttavia, questo non è molto performante per le grandi liste. È possibile ottimizzare utilizzando un set per second_array:

second_array = set(second_array) 
new_array = [x for x in main_array if x not in second_array] 

Se l'ordine degli elementi non ha importanza, è possibile utilizzare un set per entrambi gli array:

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

Mi piace quanto sia espressivo Python :). È come se parlassi inglese. – Vikas

+2

Bella risposta, solo una piccola aggiunta: è possibile ottimizzare la variante di conservazione degli ordini cambiando 'second_array' in un set prima: ' second_set = set (secondo_array); new_array = [x per x in main_array se x non in 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'] 
Problemi correlati