我有一个清单
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)]
如果订单/重复无关紧要:
>>> 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)]
A
它每次检查时都必须潜在地扫描整个列表x not in A
。