Python, 删除列表中的所有条目行

说我有一个列表:


main_list = ['bacon', 'cheese', 'milk', 'cake', 'tomato']


还有一个列表:


second_list = ['cheese', 'tomato']


我想从主名单中删除第二列表中的所有项目?

先感谢您

Adam
已邀请:

八刀丁二

赞同来自:

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//

君笑尘

赞同来自:

如果您可以使用的顺序并不重要
http://docs.python.org/library/stdtypes.html#set
:


>>> 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']/

裸奔

赞同来自:

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']

要回复问题请先登录注册