8

と がlist1ありlist2ます。list2から削除する必要がある単語のグループですlist1。たとえば、次のとおりです。

list1=['paste', 'text', 'text', 'here', 'here', 'here', 'my', 'i', 'i', 'me', 'me']

list2=["i","me"]

望ましい出力:

list3=['paste', 'text', 'text', 'here', 'here', 'here', 'my']

「for」を使用してさまざまなバージョンを試しましたが、これまでのところ結果はありません。

どんなアイデアでも大歓迎です!

4

2 に答える 2

19

リスト内包表記を使用する:

>>> list1 = ['paste', 'text', 'text', 'here', 'here', 'here', 'my', 'i', 'i', 'me', 'me']
>>> list2 = ["i","me"]
>>> list3 = [item for item in list1 if item not in list2]
>>> list3
['paste', 'text', 'text', 'here', 'here', 'here', 'my']

注: リスト内のルックアップは です。代わりにからセットO(n)を作成することを検討してください。セット内のルックアップはです。list2O(1)

于 2013-07-29T21:46:09.310 に答える
5

集合演算の活用についてはどうですか?

diff = set(list1) - set(list2)
result = [o for o in list1 if o in diff]

またはさらに良い(より効率的):

set2 = set(list2)
result = [o for o in list1 if o not in set2]
于 2013-07-29T21:52:48.740 に答える