【发布时间】:2016-09-18 15:57:29
【问题描述】:
我有这两个列表,我需要从另一个列表中减去一个,但是常规的“-”不起作用,.intersection 或 XOR (^) 也不起作用。
A = [(0, 1)]
B = [(0, 0), (0,1), (0, 2)]
基本上我想要的是:
B - A = [(0, 0), (0, 2)]
【问题讨论】:
标签: python list tuples subtraction
我有这两个列表,我需要从另一个列表中减去一个,但是常规的“-”不起作用,.intersection 或 XOR (^) 也不起作用。
A = [(0, 1)]
B = [(0, 0), (0,1), (0, 2)]
基本上我想要的是:
B - A = [(0, 0), (0, 2)]
【问题讨论】:
标签: python list tuples subtraction
【讨论】:
如果B 和A 中没有重复的元组,最好将它们保留为集合,并使用集合的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)}
【讨论】:
.difference 这样的方法时,你不需要明确地将A 转换为一个集合,因为它会接受任何可迭代的。
您可以通过将列表转换为集合来执行此类操作。设置差异:
r = set(B)-set(A)
必要时转换为列表:list(r)
与在列表上运行“in”操作相比,在集合上工作效率更高:using lists vs sets for list differences
【讨论】: