2012-05-12 15 views

回答

7

如果顺序并不重要,你可以使用sets

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

这里我们使用相交的操作,&。如果你只想在你的第二个列表中未找到的项目,我们可以使用差异,-

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

如果应该保留订单,这将不起作用。否则这确实是最好的解决方案。但是,我认为他想删除这些元素,所以使用'-'而不是'&'。 – ThiefMaster

+1

@ThiefMaster - 真的,并没有解释'我想要所有的元素'的权利! – fraxel

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

然而,这不是大名单非常高性能的。您可以通过使用一组second_array优化:

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

如果项目的顺序并不重要,你可以使用两个阵列一组:

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

我喜欢富有表现力的Python是:)。这就像你在说英语。 – Vikas

+2

不错的答案,只是一个小小的补充:您可以通过首先将'second_array'更改为一个集合来优化顺序保留变体: 'second_set = set(second_array); new_array = [x for main_array如果x不在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'] 
相关问题