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

本文介绍了Python集合的对称差集概念,它是两个集合中不属于交集的所有元素。通过示例展示了如何使用symmetric_difference()方法和^运算符来获取对称差集,并比较了两者之间的差异。此外,还提供了对称差集在文氏图中的表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇我们学习 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() 方法以及对称差集操作符(^)都可以用于查找对称差集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不剪发的Tony老师

为 5 个 C 币而折腰。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值