2011-06-21 83 views
5

我想查找Python中的兩個列表的交集。我有一些看起來像這樣:在Python中相交兩個單詞列表

>>> q = ['apple', 'peach', 'pear', 'watermelon', 'strawberry'] 
>>> w = ['pineapple', 'peach', 'watermelon', 'kiwi'] 

,我想找到的東西,看起來像這樣:

t = ['peach', 'watermelon'] 

我知道它的簡單,問題,但即時通訊新的Python - 沒有任何人有有什麼建議麼?

回答

10

交集()方法可用於sets,它可以很容易地從列表中創建。

埃塔:如果你想有一個清單出來吧......

q = ['apple', 'peach', 'pear', 'watermelon', 'strawberry'] 
w = ['pineapple', 'peach', 'watermelon', 'kiwi'] 
t = list(set(q) & set(w)) 

現在t爲:

['watermelon', 'peach'] 
+2

打我給它。集合也適用於二元運算符'|'(OR = union),'&'(AND = intersection)和'^'(XOR =在一個集合中,但不是兩個集合),所以這也會給出答案:'t =設置(q)&設置(w)' –

+1

哈,您的評論發佈就像我的編輯一樣。在其他人添加它們之前嘗試輸入示例很有趣。 – Turnsole

+0

完美!並有可能將交叉列表(我不小心做成一個集合)保存爲csv文件? @lazyr @Hydrangea – user808545

4

做的首選方法是通過set intersection

list(set(q) & set(w)) 

如果列表很短,則應該使用list comprehension

t = [x for x in q if x in w] 

但是,要小心,這是O(n^2),所以不是非常有效的長名單。

+3

列表理解的解決方案具有二次型複雜度:'lq * lw = O(n^2)',而set操作是線性的'2lq + lw = O(n)''lq'和'lw'' q'和'w'列表。 – GaretJax

+0

爲什麼downvote? – Kimvais

+0

由於基於列表理解的解決方案。 – GaretJax

1

正是在這裏討論了,這樣intersection工作快一點,所以你可以使用:

q = ['apple', 'peach', 'pear', 'watermelon', 'strawberry'] 
w = ['pineapple', 'peach', 'watermelon', 'kiwi'] 
set(q).intersection(w)