0
点赞
收藏
分享

微信扫一扫

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

早安地球 2022-02-10 阅读 120

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

集合的对称差集

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

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

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

{'C#', 'Python'}

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

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

Python symmetric difference of two sets

在 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() 方法以及对称差集操作符(^)都可以用于查找对称差集。
举报

相关推荐

0 条评论