我想在python中找到两个列表的交集。我有一些看起来像这样的东西:
>>> q = ['apple', 'peach', 'pear', 'watermelon', 'strawberry']
>>> w = ['pineapple', 'peach', 'watermelon', 'kiwi']
我希望找到这样的东西:
t = ['peach', 'watermelon']
我知道这是一个简单的问题,但我对python不熟悉 - 有没有人有任何建议?
答案 0 :(得分:10)
intersection()方法适用于sets,可以从列表中轻松制作。
ETA:如果你想要一个清单......
q = ['apple', 'peach', 'pear', 'watermelon', 'strawberry']
w = ['pineapple', 'peach', 'watermelon', 'kiwi']
t = list(set(q) & set(w))
现在是:
['watermelon', 'peach']
答案 1 :(得分:4)
首选方法是通过set intersection:
list(set(q) & set(w))
如果列表很短,则list comprehension应该有效。
t = [x for x in q if x in w]
但是,请注意,这是O(n^2)
,因此对于长列表效率不高。
答案 2 :(得分:1)
这里讨论的是intersection工作得更快,所以你可以使用:
q = ['apple', 'peach', 'pear', 'watermelon', 'strawberry']
w = ['pineapple', 'peach', 'watermelon', 'kiwi']
set(q).intersection(w)