說我有一個列表:Python中,除去字符串中所有出現的列表
main_list = ['bacon', 'cheese', 'milk', 'cake', 'tomato']
另一份:
second_list = ['cheese', 'tomato']
,我想刪除在第二列表中的所有元素,從主列表?
預先感謝您
亞當
說我有一個列表:Python中,除去字符串中所有出現的列表
main_list = ['bacon', 'cheese', 'milk', 'cake', 'tomato']
另一份:
second_list = ['cheese', 'tomato']
,我想刪除在第二列表中的所有元素,從主列表?
預先感謝您
亞當
如果順序並不重要,你可以使用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'])
如果應該保留訂單,這將不起作用。否則這確實是最好的解決方案。但是,我認爲他想刪除這些元素,所以使用'-'而不是'&'。 – ThiefMaster
@ThiefMaster - 真的,並沒有解釋'我想要所有的元素'的權利! – fraxel
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))
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']
是否爲了物? – jamylak