说我有一个清单:
main_list = ['bacon', 'cheese', 'milk', 'cake', 'tomato']
和另一个清单:
second_list = ['cheese', 'tomato']
我想从主列表中删除第二个列表中找到的所有元素吗?
提前谢谢
亚当
答案 0 :(得分: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))
答案 1 :(得分: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'])
答案 2 :(得分:3)
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'])
答案 3 :(得分: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']