Python入门教程第48篇 集合的对称差集

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第48篇 集合的对称差集相关的知识,希望对你有一定的参考价值。

本篇我们学习 Python 集合的对称差集(symmetric difference),它和差集是两个不同的概念。

集合的对称差集

两个集合的对称差集包含了两个集合中不属于两者交集的所有元素。以下是集合 s1 和 s2:

s1 = 'Python', 'Java', 'C++'
s2 = 'C#', 'Java', 'C++'

s1 和 s2 的对称差集返回结果如下:

'C#', 'Python'

从以上结果可以看出,所有元素属于 s1 或者 s2,同时又不属于它们的交集。

以下文氏图解释了集合 s1 和 s2 的对称差集:

在 Python 中,可以使用集合的 symmetric_difference() 方法或者对称差集操作符(^)获取两个或多个集合的对称差集。

symmetric_difference() 方法

集合的 symmetric_difference() 方法可以返回两个或多个集合的对称差集:

new_set = set1.symmetric_difference(set2, set3,...)

例如,以下示例返回了集合 s1 和 s2 的对称差集:

s1 = 'Python', 'Java', 'C++'
s2 = 'C#', 'Java', 'C++'

s = s1.symmetric_difference(s2)

print(s)

输出结果如下:

'C#', 'Python'

symmetric_difference() 方法返回了一个新的集合,不会修改原始集合。

对称差集操作符

查找对称差集的另一个方法就是使用对称差集操作符(^):

new_set = set1 ^ set2 ^...

以下示例同样返回了 s1 和 s2 的对称差集:

s1 = 'Python', 'Java', 'C++'
s2 = 'C#', 'Java', 'C++'

s = s1 ^ s2

print(s)

输出结果如下:

'Python', 'C#'

以下示例返回了多个集合的对称差集:

s1 = 1, 2, 3
s2 = 2, 3, 4
s2 = 3, 4, 5

s = s1 ^ s2 ^ s3

print(s)


输出结果如下:

```python
1, 3, 5

两种方法比较

symmetric_difference() 方法支持各种可遍历对象,例如字符串、列表、字典等。如果可遍历对象不是数组,该方法会将其转换为数组之后再返回它们的对称差集。

以下示例使用 symmetric_difference() 方法查找一个集合和一个列表的对称差集:

scores = 7, 8, 9
ratings = [8, 9, 10]
new_set = scores.symmetric_difference(ratings)

print(new_set)

输出结果如下:

10, 7

另一方面,对称差集操作符只支持集合参数。如果我们使用非集合的可遍历对象作为参数,将会返回一个错误。例如:

scores = 7, 8, 9
ratings = [8, 9, 10]
new_set = scores ^ ratings

print(new_set)
TypeError: unsupported operand type(s) for ^: 'set' and 'list'

总结

  • 两个或多个集合的对称差集包含了属于任何集合、但不属于它们的交集的所有元素。
  • 集合的 symmetric_difference() 方法以及对称差集操作符(^)都可以用于查找对称差集。

以上是关于Python入门教程第48篇 集合的对称差集的主要内容,如果未能解决你的问题,请参考以下文章

python里面集合的集合的交并差和对称差集的求法。

python学习第十六天集合的关系测试

对比集合Set | 详解Pandas的DataFrame如何做交集并集差集与对称差集

两个集合求对称差集

python怎么求两个集合set的差集

vector/set集合-交集并集差集对称差