摘要:在本节中,你将了解 Python 集合的差集,以及如何使用它来找出两个或多个集合之间的差异。
Python 集合差集简介
两个 集合 的差集会得到一个新的集合,该集合包含来自第一个集合但不存在于第二个集合中的元素。
假设你有以下集合 s1
和 s2
:
s1 = {'Python', 'Java', 'C++'}
s2 = {'C#', 'Java', 'C++'}
集合 s1
和集合 s2
的差集得到了下面这个只包含一个元素的集合:
{'Python'}
……因为在第一个集合中只Python
这个元素不存在于第二个集合中。
集合的差集不满足交换律。集合 s2
和集合 s1
的差集得到的是下面这个集合:
{'C#'}
下面的维恩图展示了集合 s1
和集合 s2
之间的差集情况:
并且下面的维恩图展示了集合 s2
和集合 s1
之间的差集情况:
在 Python 中,你可以使用集合difference()
方法或集合差集运算符(-
)来找出集合之间的差异。
1)使用 Python 集合difference()
方法来找出集合之间的差异
集合(Set)类型有一difference()
(差集)方法,该方法会返回两个或多个集合之间的差集。
set1.difference(s2, s3, ...)
例如,你可以使用集合difference()
方法来找出集合 s1
和集合 s2
之间的差集:
s1 = {'Python', 'Java', 'C++'}
s2 = {'C#', 'Java', 'C++'}
s = s1.difference(s2)
print(s)
输出:
{'Python'}
并且这个示例展示了如何使用集合difference()
方法来找出集合 s2
和集合 s1
之间的差集。
s1 = {'Python', 'Java', 'C++'}
s2 = {'C#', 'Java', 'C++'}
s = s2.difference(s1)
print(s)
输出:
{'C#'}
请注意difference()
方法会返回一个新的集合。它不会改变原始的集合。
2)使用 Python 集合差集运算符(-
)来找出集合之间的差异
除difference()
方法之外,Python 还为你提供了集合差集运算符(-
),通过它你可以找出集合之间的差异。
s = s1 - s2
下面的示例使用差集运算符(-
)来找出集合 s1
和集合 s2
之间的差集:
s1 = {'Python', 'Java', 'C++'}
s2 = {'C#', 'Java', 'C++'}
s = s1 - s2
print(s)
并且这个示例使用集合差集运算符来返回集合 s2
和集合 s1
之间的差集:
s1 = {'Python', 'Java', 'C++'}
s2 = {'C#', 'Java', 'C++'}
s = s2 - s1
print(s)
输出:
{'C#'}
集合difference()
方法与集合差集运算符(-
)的对比
集合difference()
方法可以接受一个或多个可迭代对象(例如:字符串、列表、字典),而集合差集运算符(-
)只允许操作数是集合。
当你将可迭代对象传递给集合difference()
方法时,在执行差集操作之前,它会先将这些可迭代对象转换为集合。
下面展示了如何对一个列表使用集合difference()
方法:
scores = {7, 8, 9}
numbers = [9, 10]
new_scores = scores.difference(numbers)
print(new_scores)
然而,如果你对可迭代对象使用集合差集运算符(-
),你将会得到一个错误:
scores = {7, 8, 9}
numbers = [9, 10]
new_scores = scores - numbers
print(new_scores)
错误:
TypeError: unsupported operand type(s) for -: 'set' and 'list'
总结
两个集合的差集会得到一个新的集合,该集合包含第一个集合中存在但第二个集合中不存在的元素。
使用集合
difference()
方法或集合差集运算符(-
)来找出集合之间的差异。