-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)]
4

1 回答 1

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)]

A它每次检查时都必须潜在地扫描整个列表x not in A

于 2013-04-25T11:57:14.203 回答