MEMOO
MEMOO
Published on 2025-04-19 / 3 Visits
0
0

Python集合对称差集运算

摘要:在本节中,你将学习如何在 Python 中找出两个或多个集合之间的对称差集。

集合对称差集简介

两个 集合 之间的对称差集是由那些仅属于其中一个集合,而不属于它们交集的元素所组成的集合。

假设你有以下集合 s1 和集合 s2

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

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

集合 s1 和集合 s2 的对称差集得到的是下面这个集合:

{'C#', 'Python'}

从输出结果中你可以清楚地看到,返回集合中的元素要么在集合 s1 中,要么在集合 s2 中,但不在它们的交集中。

下面的维恩图展示了集合 s1 和集合 s2 的对称差集:

在 Python 中,你可以通过使用集合的 symmetric_difference() 方法或对称差集运算符(^)来找出两个或多个集合的对称差集。

### 使用 symmetric_difference() 方法来找出集合的对称差集

集合(Set)类型有 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() 方法会返回一个新的集合,并且不会修改原始的集合。

使用对称差集运算符(^)来找出集合的对称差集

除了使用集合的 symmetric_difference() 方法之外,你还可以使用对称差集运算符(^)来找出两个或多个集合之间的对称差集:

new_set = set1 ^ set2 ^...

下面的示例展示了如何对集合 s1 和集合 s2 使用对称差集运算符(^):

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

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

s = s1 ^ s2

print(s)

输出:

{'Python', 'C#'}

symmetric_difference() 方法与对称差集运算符(^)的对比

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() 方法或对称差集运算符(^)来找出两个或多个集合的对称差集。


Comment