前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >#小手一抬学Python# Python 集合三板斧

#小手一抬学Python# Python 集合三板斧

原创
作者头像
程序员迪迪
发布于 2021-12-31 08:14:18
发布于 2021-12-31 08:14:18
3360
举报

Python 中一个无序且元素唯一的数据类型,它是集合。

集合是啥

集合是一个数据类型,它其中的每个元素的顺序不固定,但唯一。多么绕的一句话,回味,一定要好好回味。

集合中的元素内容必须是不可变类型,例如整数、浮点数、字符串、元组等内容,可变的列表、字典、集合不可以。

集合本身是可变的,跟列表一样可以增删元素。

集合的声明

截止到现在,小括号用来声明元组,中括号用来声明列表,大括号用来声明字典,那集合怎么办?Python 中也是用大括号来声明集合。当然你也可以通过 set 函数建立集合。

集合定义的语法格式如下:

代码语言:txt
AI代码解释
复制
my_set = {元素1,元素2,...}

简单的代码示例如下:

代码语言:txt
AI代码解释
复制
my_set = {1, 2, 3, 3, 10, 4, 5, 6}

print(my_set)

数据输出之后,会发现重复的整数 3 只剩下一个了。还是因为集合的元素是唯一的,出现重复多的部分将会舍去。

如果在集合中使用了可变类型作为元素,会报错。

代码语言:txt
AI代码解释
复制
my_set = {1, 2, 3, [3, 10, 4, 5, 6]}
# 错误提示:TypeError: unhashable type: 'list'
print(my_set)

这里需要注意下,空集合的声明不能使用 {},只用一个大括号表示的是空字典。声明一个空集合需要用到 set 函数。

set 函数定义集合

使用 set 函数可以定义集合,并且可以定义空集合。set 函数参数可以为字符串、列表、元组。

通过 set 定义空集合

代码语言:txt
AI代码解释
复制
my_dict = {}
my_set = set()

# 空字典
print(type(my_dict))
# 空集合
print(type(my_set))

set 将字符串转换成集合

set 函数类似一个强制转换,可以将其它类型的转换成集合。

代码语言:txt
AI代码解释
复制
my_set = set("my name is xiangpica")
print(my_set)

该内容会过滤重复字母,并且输出的顺序不定,因为集合是无序的。

集合可以对元组去重

借助集合元素的不允许重复,可以实现一些特定的效果,例如去重。

代码语言:txt
AI代码解释
复制
my_tuple = ("apple", "orange", "orange", "pear", "banana", "food")
my_set = set(my_tuple)
print(my_set)

集合的操作

在学集合相关操作前,需要在学习一些符号。

符号

含义

&

交集

并集

-

差集

^

对称差集

接下来的内容就非常类似高中线代里面的概念了,求集合的交并差集。

交集(intersection)

交集就是求两个集合共有的元素。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1 & my_set2
print(both)

除了通过 & 符号以外,还可以通过集合的 intersection 方法完成。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1.intersection(my_set2)
print(both)

并集(union)

并集就是取所有集合的所有元素,如果出现重复的保留一个。使用符号 | 或者 union 方法完成。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1 | my_set2
print(both)

使用 union 完成。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1.union(my_set2)
print(both)

差集(difference)

对于求集合的差集与交并集不同,有个先后顺序问题,例如属于 A 但不属于 B 表示为 A-B,同理属于 B 但不属于 A,表示为 B-A。

差集的符号是 -,可以使用 difference 方法进行运算。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}
# 求解属于 A,但不属于 B 的元素
dif1 = my_set1 - my_set2
print(dif1)
# 求解属于 B,但不属于 A 的元素
dif2 = my_set2 - my_set1
print(dif2)

接下来如何使用 difference 方法去求差集就交给你自己完成啦。

对称差集(symmetric difference)

A 与 B 两个集合,如果想要获得属于 A 或者 B 集合的元素,但又不要属于 A 且属于 B 的元素,这时就是对称差集的应用场景了。

对称差集的符号是 ^,方法名是 symmetric_difference

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}

dif = my_set1 ^ my_set2
print(dif)

上述代码就会输出既不属于 A 也不属于 B 的元素,即对称差集。

集合的方法


集合的增删

add 方法可以在集合中增加元素,语法格式如下:

代码语言:txt
AI代码解释
复制
my_set.add(新增元素)

第一个需要注意的新的元素如果已经存在集合中,不会新增进去,第二个需要注意的是集合是无序的,新增加元素的位置将不确定。

代码语言:txt
AI代码解释
复制
my_set = {"apple", "orange", "pear", "grape"}
my_set.add("new")
my_set.add("new")
print(my_set)

remove 方法可以删除集合中元素,前提是该元素在集合中,如果删除不存在的元素报错。

代码语言:txt
AI代码解释
复制
my_set = {"apple", "orange", "pear", "grape"}

my_set.remove("apple")

print(my_set)
# 第二次删除报错 因为 apple 已经不在集合中
my_set.remove("apple")
print(my_set)

discard 方法可以删除集合元素,如果元素不存在不会报错。

代码语言:txt
AI代码解释
复制
my_set = {"apple", "orange", "pear", "grape"}

my_set.discard("apple")
print(my_set)

my_set.discard("apple")
print(my_set)

pop 方法为随机删除一个元素,被删除的元素会被返回,即可以用一个变量接收被删除的元素,如果集合为空使用 pop 会报错。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "grape"}

# pop 方法随机删除一个元素,将被删除的元素返回
var = my_set1.pop()
print(var)

# 空集合使用 pop 方法报错
my_set2 = set()
var = my_set2.pop()
print(var)

clear 方法删除集合内的所有元素

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "grape"}

my_set1.clear()
print(my_set1)

集合的其它方法

isdisjoint 方法用于判断两个集合是否存在相同元素,没有返回 True,否则返回 False。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

# 两个集合没有相同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool) # 返回 True

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon","apple"}

# 两个集合有相同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool)

issubset 该方法用于判断一个集合是否是另一个集合的子集,确定是返回 True,否则返回 False。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

# 第二个集合不是第一个集合的子集
ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 False

# 第二个集合是第一个集合的子集
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"orange","apple"}

ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 True

注意判断 A 是 B 的子集,格式是 A.issubset(B),顺序别搞错。

issuperset 方法用于判断一个集合是否是另一个集合的父集,与 issubset 恰好相反,具体实现由大家自行完成。

update 方法用于将一个集合的元素添加到另一个集合内,语法格式如下:

代码语言:txt
AI代码解释
复制
被添加的集合A.update(待添加的集合B)

该方法谁在前就是给谁添加。

代码语言:txt
AI代码解释
复制
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

my_set1.update(my_set2)
print(my_set1)

其它一些方法,本轮滚雪球阶段只做了解。

  • intersection_update 此方法用于求多个集合的交集
  • difference_update 删除集合内与另一集合重复的元素
  • symmetric_difference_update 类似对称差集的用法

集合可用的内置函数

max、min、sum

以上内置函数作用域集合与列表使用规则一致,自行测试即可。

len

获取集合元素的数量。

sorted

使用该函数可以对集合进行排序。

冻结集合 frozenset

集合中的元素可以添加与删除,与列表可以对应。

还存在一种不可进行添加与删除元素的集合,叫做冻结集合,与元组可以对应学习。

冻结集合不做展开讲解,有兴趣的可以检索一些,不过我觉得这节课内容已经非常多啦。

这篇博客的总结

集合,一个无序且元素必须唯一的容器型数据类型,在橡皮擦的编程生涯中,集合经常用来去重,效率高、编写简单,值得掌握。

下篇博客开始,我们将进入 Python 函数的世界,难度要来了哦~

最后一碗毒鸡汤

当你学会破罐破摔 你会发现这世界豁然开朗 O(∩_∩)O 哈哈~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python全网最全基础课程笔记(九)——集合,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
综上所述,Python的集合是一种功能强大且灵活的数据结构,特别适用于需要去除重复元素或进行集合运算的场景。
小白的大数据之旅
2024/11/20
1300
Python全网最全基础课程笔记(九)——集合,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python - 基础数据类型 set 集合
重点:因为 set 集合只能包含不可变对象元素,而列表、集合本身都是可变对象,所以会报错
小菠萝测试笔记
2021/08/06
3660
Python 集合操作及方法总结
一、集合概念 集合(set)是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 集合的唯一性,无序性和确定性。
matinal
2023/10/13
2180
【Python入门第九讲】 集合(set)
集合(Set)是 Python 中的一种基本数据结构,它是由不重复元素组成的无序集合。集合对象支持多种数学运算,如并集、交集、差集和对称差等。
不惑
2024/01/31
2370
【Python入门第九讲】 集合(set)
python 全网最详细的集合set详解
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
matinal
2023/10/13
4990
深入探索Python集合(Set)的高效应用:数据处理、性能优化与实际案例分析
在Python编程中,集合(set)是一种基本的数据结构,它用于存储唯一(不重复)的元素。与列表(list)不同,集合中的元素是无序的,并且不允许有重复值。集合提供了丰富的操作方法来处理集合之间的关系,如并集、交集、差集等。本文将详细介绍Python中集合的常用操作,并通过代码实例进行演示和分析。
suye
2024/10/23
1630
Python教程(12)——Python数据结构集合set介绍
集合是一种无序、可变的数据结构,它也是一种变量类型,集合用于存储唯一的元素。集合中的元素不能重复,并且没有固定的顺序。在Python 提供了内置的 set 类型来表示集合,所以关键字set就是集合的意思。
一点sir
2023/09/03
2990
python中的集合(Set)
在Python中,集合(Set)是一种无序、无重复元素的数据结构。集合通过花括号 {} 或者使用 set() 函数进行创建。与其他容器类型(如列表和字典)不同,集合中的元素是不可变的(不可被修改),且没有固定的顺序。
GeekLiHua
2025/01/21
1540
Python3 集合
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
AlexZhang
2021/12/02
2450
Python 中常用的数据类型及相关操作详解
列表是 Python 中最常用的数据类型之一,用于存储具有序号的元素。列表使用方括号([])定义,并可以包含任何类型的元素。
全栈若城
2024/02/29
2450
Python 中常用的数据类型及相关操作详解
【Python】此集合非彼集合
🚀write in front🚀    🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5→周榜31→总榜2513🏅 🆔本文由 謓泽 原创 CSDN首发🐒 如需转载还请通知⚠ 📝个人主页:打打酱油desu-CSDN博客🎓 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:【Python】系列_謓泽的博客-CSDN博客🎓 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩 ---- 目录 🎓写在前
謓泽
2022/12/12
7690
10.Python Set集合方法详解
本教程将详细介绍Python set集合的所有内置方法,包括它们的使用方式、参数说明、返回值以及实际应用场景。
全栈若城
2025/04/08
1440
Python数据容器:集合
在 Python 中,数据容器是组织和管理数据的重要工具,集合作为其中一种基本的数据结构,具有独特的特性和广泛的应用。本章详细介绍了集合的定义、常用操作以及遍历方法。
Heaven645
2024/07/21
7441
Python数据容器:集合
软件测试/人工智能|一文告诉你Python集合相关知识
集合(set)是Python中一种重要的数据结构,它提供了存储唯一元素的容器,集合能够让我们高效地执行诸如成员检测、交集、并集等操作。让我们一起深入了解 Python 中的集合吧!
霍格沃兹测试开发Muller老师
2023/12/08
1750
python set大小_python set集合
s7= {[1],(1,),1} #set的元素要求必须可以hash 列表不能hash
用户7886150
2021/01/26
1.7K0
day09-集合
诶?我们之前讲过的字典也是同样的可变,无序的数据类型,但是字典是键值对的存储形式,而集合不是
似小陈吖
2024/01/23
1360
Python学习—元组与集合
Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
py3study
2020/01/06
5120
Python3 基本数据结构总结
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
chaibubble
2019/09/25
1.1K0
【七】Python基础之数据结构:集合
集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。
菲宇
2019/06/13
4240
python中创建集合的语句_Python 集合(set) 介绍
#1.经理有:曹操,刘备,孙权#技术员有:曹操,孙权,张飞, 关羽#用集合求:#1. 即是经理也是技术员的有谁?#2. 是经理,但不是技术人员的都有谁?#3. 是技术人员,但不是经理的人都有谁?#4. 张飞是经理吗?#5. 身兼一职的人都有谁?#6. 经理和技术人员共有几个人?
用户7886150
2021/01/26
1.9K0
推荐阅读
相关推荐
Python全网最全基础课程笔记(九)——集合,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档