如何在python中减去两个迭代

时间:2015-02-17 20:59:13

标签: python list subtraction

有两个列表A和B.我想获得A中的所有元素但不是B中的所有元素。任何有效的方法都可以这样做吗?

3 个答案:

答案 0 :(得分:8)

您可以使用列表推导为您执行此操作。

filtered = [i for i in A if i not in B]

如果列表都很大,您可能需要考虑从set创建B以便更快地进行成员资格查找

setB = set(B)
filtered = [i for i in A if i not in setB]

此解决方案维护A的顺序以及A中存在的任何重复项。

答案 1 :(得分:4)

我总是喜欢使用套装:

set(A) - set(B)

编辑:除非A有重复或您关心订单,否则请使用@ Cyber​​的答案

答案 2 :(得分:-2)

套装很适合这个目的

set(A) - set(B)

例如

>>> set([2,2,2,3,3,4])- set([1,2,2,4,5])
set([3])

顺便说一句。这看起来像this