8

我有list1list2list2是一组必须从 中删除的单词,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),请考虑从中创建一个集合list2- 集合中的查找是O(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 回答