2013-04-25 114 views
-2

我有一個列表檢查,看是否列表包含相同的元素

List1 = [(12,34),(12,6),(2,4),(1,3),(34,32),(34,6)] 

另一份

List2 = [(12,34),(12,6),(2,4),(1,3),(34,32),(56,12),(78,23),(23,56)] 

我想創建一個新的列表中,選中第一個的元素對的元素第二。基本上編輯第二個列表。這份清單將成爲

List3 = [(56,12),(78,23),(23,56)] 
+1

它總是和你約會,不是嗎? :) – 2013-04-25 11:57:00

+4

約翰史密斯我不明白你問每一次幾乎完全相同的問題的輕微變體......看起來這個網站並沒有讓你受益 – jamylak 2013-04-25 11:58:22

回答

4

如果訂單/重複不事:

>>> A = [(12,34),(12,6),(2,4),(1,3),(34,32),(34,6)] 
>>> B = [(12,34),(12,6),(2,4),(1,3),(34,32),(56,12),(78,23),(23,56)] 
>>> set(B).difference(A) 
set([(78, 23), (56, 12), (23, 56)]) 

否則,如果爲了此事做,只需使用一組的列表解析檢查會員(O(1)攤銷會員檢查):

>>> set_A = set(A) 
>>> [x for x in B if x not in set_A] 
[(56, 12), (78, 23), (23, 56)] 

請記住,這個簡單的解決方案也適用:

>>> [x for x in B if x not in A] 
[(56, 12), (78, 23), (23, 56)] 

它每次檢查x not in A時只需要潛在地掃描整個列表A

相關問題