Python 集合:difference() 与 symmetric_difference() 有何不同?

38

python集合中的difference()方法和symmetric_difference()方法有什么区别?


4
这是Python的官方文档,介绍了集合对象(set objects)在Python语言中的用法。集合是一种无序、可变的数据类型,其中不包含重复元素。文档详细介绍了集合对象的创建、修改和操作方法等内容。同时还提供了一些示例代码来帮助读者更好地理解集合对象的应用场景和实现方式。 - Druta Ruslan
1
文档中的描述非常清晰。尝试使用一些简单的示例集进行操作。 - PM 2Ring
给定集合 ab(a - b) | (b - a) == a ^ b。通过包含两个差异来实现对称性。 - Yann Vernier
3个回答

77

对称差集

如果AB是集合

A - B

A中的所有内容(除了B中的内容)。

>>> A = {1,2,3}
>>> B = {1,4,5}
>>> 
>>> A - B
{2, 3}
>>> B - A
{4, 5}

A.symmetric_difference(B) 包含恰好在一个集合中的所有元素,即 A - BB - A 的并集。

>>> A.symmetric_difference(B)
{2, 3, 4, 5}
>>> (A - B).union(B - A)
{2, 3, 4, 5}

12
我只想补充一下,运算符 ^-|& 分别提供对称差、差集、并集和交集操作。因此,在所提供的操作中,以下是正确的:a.symmetric_difference(b) == a ^ b(a - b).union(b - a) == a - b | b - a - Pedro Rodrigues

10
两个相交集合的差异并不完全等同于算术差异。

intersection sets

考虑上面的两个圆(蓝色和绿色)作为两组相交的物品。黄色部分仅用于参考,实际上它们同时是绿色和蓝色的。

现在考虑以下内容。

从蓝色中减去绿色所得到的结果集应该有什么?它应该有任何绿色吗?不应该,因为我们想要减去绿色。应该有任何黄色吗?不应该,因为黄色是绿色。

相反呢?从绿色中减去蓝色。它不应该有蓝色和黄色,因为黄色是蓝色。

因此,我们可以从一组或另一组中获取物品,但不能获取不同之处的物品。这就是对称差异的含义所在。

考虑下面的例子。

>>> a = {1,2,3}
>>> b = {1,4,5}
>>> a - b       ## asymmetric difference
{2, 3}                ## nothing from b here
>>> b - a       ## asymmetric difference
{4, 5}                ## nothing from a here
>>> a ^ b       ## symmetric difference
{2, 3, 4, 5}          ## from a and b but not from both

不对称差异取决于您对a和b的处理方式,或者您如何查看它们,或者您按什么顺序比较它们。以一种方式查看它们,您会得到一件事情,以另一种方式查看它们,您会得到另一件事情。而对称差异则不在乎您从哪个方向观察它。注意。这类似于XOR的行为。因此,在Python语言中选择了该运算符。如果您给出数字,则^也用作二进制XOR。

2

我在定义中没有注意到“either”这个关键词。谢谢。 - Anya Samadi
如果您觉得社区已经回答了您的问题,请选择正确的答案。 - RandomHash

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