2013-04-25 118 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

相关问题