30

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

4

3 回答 3

59

对称差

如果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 - B并集B - A

>>> A.symmetric_difference(B)
{2, 3, 4, 5}
>>> (A - B).union(B - A)
{2, 3, 4, 5}
于 2018-06-15T08:01:16.193 回答
6

两组(或一组事物)之间的差异与算术差异并不完全相同。

交集

将上面的两组(蓝色和绿色)视为彼此相交的两组或圆圈。黄色部分是交叉点,属于两个集合。

现在考虑从蓝色中减去绿色得到的集合应该有什么。它应该有任何绿色吗?不。它会有不是绿色的蓝色(或者不是黄色,在相同的逻辑中)。反过来也是如此。

因此,您可以从一组或另一组中获取项目,但不能从两者中获取。我想给你介绍一下,我的小朋友,对称差异。给你蓝色和绿色,但不是黄色。

>>> a = {1,2,3}
>>> b = {1,4,5}
>>> a - b       ## asymmetric difference
{2, 3}
>>> b - a       ## asymmetric difference
{4, 5}
>>> a ^ b       ## symmetric difference
{2, 3, 4, 5}

不对称差异取决于您使用a和做什么b,或者您以什么顺序比较它们。以一种方式看待它,你得到一件事,以不同的方式看待它,你得到不同的东西。根据定义,不对称差异并不关心您以哪种方式看待它。

笔记。这与 XOR 的行为类似。因此在 python 语言中选择了运算符。^如果你给它数字,它也被用作二进制 XOR。

于 2020-01-31T17:58:55.553 回答
1

根据https://www.programiz.com/python-programming/methods/set/symmetric_difference

两个集合 A 和 B 的对称差是元素集合在集合 A 或 B 中的任何一个中,但不在两个集合中。

但是,差异当然是不言自明的。

于 2018-06-15T08:01:19.300 回答