从彼此中减去两个元组列表

时间:2016-09-18 15:57:29

标签: python list tuples subtraction

我有这两个列表,我需要从另一个中减去一个,但常规" - "不会工作,也不会.Intersection或XOR(^)。

A = [(0, 1)]
B = [(0, 0), (0,1), (0, 2)]

基本上我想要的是:

B - A = [(0, 0), (0, 2)]

3 个答案:

答案 0 :(得分:2)

您可以使用列表推导来解决此问题:

[item for item in B if item not in A]

可以找到更多讨论here

答案 1 :(得分:2)

如果BA中没有重复的元组,最好将它们保存为集合,并使用difference集:

A = [(0, 1)]
B = [(0, 0), (0,1), (0, 2)]
diff = set(B) - set(A) # or set(B).difference(A)
print(diff)
# {(0, 0), (0, 2)}

您可以执行其他操作,例如在两个集之间找到intersection

>>> set(B) & set(A)
{(0, 1)}

甚至可以带他们的symmetric_difference

>>> set(B) ^ set(A)
{(0, 0), (0, 2)}

答案 2 :(得分:0)

您可以通过将列表转换为集合来执行此类操作。设定差异:

r = set(B)-set(A)

如有必要,转换为列表:list(r)

与在列表上运行“in”操作相比,使用集合是有效的:using lists vs sets for list differences