10

私がリストを持っているとしましょう:

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

および別のリスト:

second_list = ['cheese', 'tomato']

そして、メインリストから2番目のリストにあるすべての要素を削除したいですか?

前もって感謝します

アダム

4

4 に答える 4

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))
于 2012-05-12T11:28:15.430 に答える
9

順序が重要でない場合は、セットを使用できます。

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

ここでは、交差演算子を使用します&。2番目のリストにないアイテムのみが必要な場合は、相違点を使用できます-

>>> set(main_array) - set(second_array)
set(['cake', 'bacon', 'milk'])
于 2012-05-12T11:27:06.987 に答える
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'])
于 2012-05-12T11:32:42.793 に答える
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']
于 2015-05-19T22:17:32.990 に答える