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篇 集合的对称差集的主要内容,如果未能解决你的问题,请参考以下文章