Python - 使用 'set' 查找列表中的不同项

38

我需要在Python中比较两个列表,我知道可以使用set命令来查找相似项,但是是否有另一种命令可以自动比较它们,而不必编写代码?

我想找到在每个列表中不存在的项目。假设列表一如下:

[1, 2, 3, 4, 5, 6] 

另外一个列表是:

[1, 2, 3, 4, 6]

我希望能够找到列表中缺失的5,最好通过一个命令来实现,但是我不知道如何循环比较。


6
你需要进行什么比较?你需要找到匹配的项目吗?具体来说,你需要做什么? - Josh Smeaton
4
不必急着投票关闭。给提问者修改问题和提供背景的机会。请等待。 - Josh Smeaton
我的意思是我想找出每个列表中“不在”的项目。比如说列表一是这样的:[1, 2, 3, 4, 5, 6],而列表二是:[1, 2, 3, 4, 6]。我想通过一个命令找出列表中缺失的数字,比如5,但我不知道该如何循环比较。 - RPiAwesomeness
3个回答

62

文档是一个很好的起点。下面是一些例子,可以帮助您确定如何比较您的集合。

要查找交集(即同时存在于两个集合中的项):

>>> a = set([1, 2, 3, 4, 5, 6])
>>> b = set([4, 5, 6, 7, 8, 9])
>>> a & b
set([4, 5, 6])

为了找到差异(仅出现在一个集合中的项):
>>> a = set([1, 2, 3, 4, 5, 6])
>>> b = set([4, 5, 6, 7, 8, 9])
>>> a - b
set([1, 2, 3])
>>> b - a
set([7, 8, 9])

要查找对称差异(即在一个集合中或另一个集合中但不在两个集合中都有的项目):

>>> a = set([1, 2, 3, 4, 5, 6])
>>> b = set([4, 5, 6, 7, 8, 9])
>>> a ^ b
set([1, 2, 3, 7, 8, 9])

如果列表a和b有成千上万个元素,那么找到差异的示例是否有效?基本上,这是一个可行的解决方案,以便稍后处理扩展问题吗? - Gcap

38

看起来你需要对称差:

a = [1,2,3]
b = [3,4,5]

print(set(a)^set(b))


>>> [1,2,4,5]

5

一个简单的列表推导式

In [1]: a=[1, 2, 3, 4, 5, 6] 

In [2]: b=[1, 2, 3, 4, 6]

In [3]: [i for i in a if i not in b]
Out[3]: [5]

这会在a中查找不在b中的项目,而不是查找每个项目中不存在的项目..所以这是差异,但不是对称差异。 - Spaceghost
@Spaceghost - 真的。我刚刚直接使用了 OP 的例子。 - Fredrik Pihl
OP要求的是不在每个中的项目,否则就会点赞。 - Spaceghost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接