Python集:difference()vs symmetric_difference()

Anj*_*nja 5 python set-difference symmetric-difference

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

tim*_*geb 13

如果ab被设置

a - b
Run Code Online (Sandbox Code Playgroud)

a不是所有的东西都在b

>>> a = {1,2,3}
>>> b = {1,4,5}
>>> 
>>> a - b
{2, 3}
>>> b - a
{4, 5}
Run Code Online (Sandbox Code Playgroud)

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}
Run Code Online (Sandbox Code Playgroud)

  • 我只是补充一下,运算符“^”、“-”、“|”和“&”分别提供对称差、差、并和交集运算。因此,在提供的操作中,以下情况成立: `a.symmetry_difference(b) == a ^ b` 和 `(a - b).union(b - a) == a - b | b - a`。 (6认同)

Ped*_*ues 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}
Run Code Online (Sandbox Code Playgroud)

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

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