ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【Python入门教程】第47篇 集合的差集

2022-02-09 18:02:04  阅读:230  来源: 互联网

标签:Python 47 s1 入门教程 差集 s2 集合 difference


本篇我们学习集合的差集操作,它可以返回两个或多个集合的差异。

集合的差集

两个集合的差集包含了第一个集合中存在,但第二个集合中不存在的所有元素。

以下是集合 s1 和 s2:

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

s1 和 s2 的差集结果只有一个元素:

{'Python'}

因为“Python”属于第一个集合,但不属于第二个集合。

集合的差集不具有可交换性,s2 和 s1 的差集如下:

{'C#'}

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

Python set difference

同理,以下文氏图解释了集合 s2 和 s1 的差集:

差集

在 Python 中,我们可以使用集合的 difference() 方法或者交集操作符(-)返回两个或多个集合的差集。

difference() 方法

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

差集操作符

除了 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#'}

以下示例返回了多个集合的对称差集:

s1 = {1, 2, 3}
s2 = {2, 3, 4}
s2 = {3, 4, 5}

s = s1 - s2 - s3

print(s)


输出结果如下:

```python
{1}

两种方法比较

集合的 difference() 方法可以支持一个或多个可遍历对象(例如字符串、列表、字典等),但是差集操作符只支持集合类型。

当我们将可遍历对象传递给 difference() 方法,它会将其转换为集合之后再执行差集操作。以下示例使用 difference() 方法获取一个集合与一个列表的差集:

scores = {7, 8, 9}
numbers = [9, 10]
new_scores = scores.difference(numbers)

print(new_scores)

如果我们将以上示例中的 difference() 方法替换为差集操作符,将会返回一个错误:

scores = {7, 8, 9}
numbers = [9, 10]
new_scores = scores - numbers

print(new_scores)
TypeError: unsupported operand type(s) for -: 'set' and 'list'

总价

  • 两个集合的差集包含了第一个集合中存在,但是第二个集合中不存在的所有元素。
  • 集合的 difference() 方法和差集操作符(-)都可以用于查找多个集合的差集。

标签:Python,47,s1,入门教程,差集,s2,集合,difference
来源: https://blog.csdn.net/horses/article/details/122539134

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有