当前位置: 首页 > news >正文

【基础知识】Python入门:集合

集合

type({"one"})
<class 'set'>
{'FishC','Python'}
{'Python', 'FishC'}
{s for s in 'FishC'}
{'s', 'C', 'F', 'i', 'h'} #无序
set("FishC")
{'s', 'C', 'F', 'i', 'h'}

集合中所有元素都是无序的,所以不能使用下标索引的方式来对其进行访问。

可以使用in和notin来判断元素是否存在于集合中。

s = set("FishC")
s[0]
Traceback (most recent call last):File "<pyshell#113>", line 1, in <module>s[0]
TypeError: 'set' object is not subscriptable
'C' in s
True

可以通过迭代的方式来访问全体集合元素。

for each in s:print(each)s
C
F
i
h

集合中的所有元素都是唯一的,不能存在重复的元素。因此可以使用集合来对列表进行去重或者检测列表是否存在重复元素

set([1,1,2,3,5])
{1, 2, 3, 5}
s = [1,1,2,3,5]
len(s) == len(set(s)) #判断数量
False 

集合的三种创建方法

(1)使用花括号,并在其传入多个元素

(2)使用集合推导式

(3)使用类型构造器set()

集合的各种内置方法

下面列举的方法不会对集合的元素进行改动,所以既适用于可变集合set(),也适用于不可变集合frozenset()

t = frozenset("FishC")
t
frozenset({'s', 'C', 'F', 'i', 'h'})

s.copy():返回s集合的一个浅拷贝

t = s.copy()
t
[1, 1, 2, 3, 5]

s.isdisjoint(other):如果s集合中没有与other 容器存在共同的元素,那么返回True,否则返回False

s = set("FishC")
s
{'s', 'C', 'F', 'i', 'h'}
s.isdisjoint(set("Python")) #h为共同元素
False
s.isdisjoint("Python")
False

s.issubset(other):如果s集合是 other容器的子集(注1),那么返回True,否则返回False
注1:对于两个集合A、B,如果集合A中任意一个元素都是集合B中的元素,我们就说这两个集合有包含关系,称集合A为集合B的子集(Subset)( <= 真子集、 < 子集)

s.issubset("FishC.com.cn")
True

s.issuperset(other):如果s集合是 other容器的超集(注2),那么返回True,否则返回False
注2∶对于两个集合A、B,如果集合B中任意一个元素都是集合A中的元素,我们就说这两个集合有包含关系,称集合A为集合B的超集(Superset) ( >= 真超集、 > 超集)

s.issuperset("Fish")
True

s.union(*others):返回一个新集合,其内容是s集合与others容器的并集(注3)
注3:对于两个集合A、B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集(Union).( | 管道符)

s.intersection(*others):返回一个新集合,其内容是s集合与others容器的交集(注4)
注4∶对于两个集合A、B,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集(Intersection) .( & and符)

s.difference(*others):返回一个新集合,其内容是存在于s集合中,但不存在于others容器中的元素,差集(注5)
注5:对于两个集合A、B,由所有属于集合A且不属于集合B的元素所组成的集合,叫做集合A与集合B的差集(Difference)。( - 减号)

s = set("FishC")
s.union({1,2,3})
{1, 's', 2, 3, 'i', 'F', 'C', 'h'}
s.intersection("Fish")
{'i', 's', 'F', 'h'}
s.difference("Fish")
{'C'}s.union({1,2,3},"Python")
{1, 's', 2, 3, 'P', 'n', 't', 'C', 'F', 'o', 'y', 'i', 'h'}
s.intersection("Php","Python")
{'h'}
s.difference("Php","Python")
{'s', 'i', 'F', 'C'}

s.symmetric_difference(other):返回一个新集合,其内容是排除掉s集合和other容器中共有的元素后,剩余的所有元素,即对称差集。( ^ 脱字符)

s = set("FishC")
s.symmetric_difference("Python")
{'s', 'P', 'n', 't', 'C', 'o', 'i', 'y', 'F'}
s <= set("FishC") #检测子集
True
s < set("FishC") #检测真子集
False
s >= set("FishC") #检测超集
True
s > set("FishC") #检测真超集
False
s | {1,2,3} |set("Python") #并集
{1, 's', 2, 3, 'P', 'n', 't', 'C', 'F', 'o', 'y', 'i', 'h'}
s &set("Php") &set("Python")
{'h'}
s - set("Php") -set("Python")
{'F', 's', 'i', 'C'}
s ^set("Python")
{'s', 'P', 'n', 't', 'C', 'o', 'i', 'y', 'F'}

注6: others参数表示支持多个容器(参数类型可以是集合,也可以是序列) ; other参数则表示单个容器。若使用括号中的运算符,则需要符号两边都为集合类型的数据。

仅适用于set()的方法

update(*others):使用others参数指定的值来更新集合,同交集

s = set("FishC")
s
{'h', 'i', 'C', 's', 'F'}
s.update([1,1], "23") #只放了1
s
{1, 'h', '2', '3', 'i', 'C', 's', 'F'}

intersection_update(*others):使用交集的方式来更新集合

difference_update( *others):使用差集的方式来更新集合

symmetric_difference_update(others):使用对称差集的方式来更新集合
以上三个方法与上一点中的交集差集对称差集的区别在于,上一点是直接返回一个新的集合,而update是对原集合进行更新,在原集合上进行改动。

s.intersection_update("FishC")
s
{'h', 'i', 'C', 's', 'F'}

add(elem):向集合中添加数据。当向集合中添加字符串时,使用update是迭代字符串中的每一个字符分别作为集合的元素,而add是将整个字符串作为一个元素插入。

s.add("45")
s
{'h', 'i', 'C', '45', 's', 'F'}

remove(elem)、discard(elem):删除集合中指定的元素,但不同的是remove方法在找不到指定的元素时会抛出异常,而discard则会静默处理

s.remove("啊啊")
Traceback (most recent call last):File "<pyshell#11>", line 1, in <module>s.remove("啊啊")
KeyError: '啊啊'
s.discard("啊啊")

pop():随机从集合中集合中弹出一个元素

s.pop()
'h'
s.pop()
'i'
s.pop()
'C'

clear():清空集合的所有元素

s
{'45', 's', 'F'}
s.clear()
s
set()

可哈希

想要正确的创建字典或者集合,那么则要求字典的键和集合元素是可哈希的

可哈希:如果一个对象是可哈希的,那么就要求他的哈希值必须在其整个生命周期中保持不变

不可变对象:可哈希。例如元组、字符串

可变对象:不可哈希。例如列表

hash(object):获取对象的哈希值。
对整数求哈希值,其哈希值等于本身。
若两个对象的值是相等的,尽管是不同的对象,那么哈希值也是相等的。
只能对不可变的对象求哈希值,可变的对象不行。

hash(1)
1
hash(1.0) #值相等,hash值相等
1 
hash(1.001)
2305843009213441{"Python":520}
{'Python': 520}
{[1,2,3]:"FishC"} #含列表,不可哈希
Traceback (most recent call last):File "<pyshell#25>", line 1, in <module>{[1,2,3]:"FishC"}
TypeError: unhashable type: 'list'
{"Python","FishC",520,1314}
{520, 1314, 'FishC', 'Python'}
{"Python","FishC",520,1314,[1,2,3]} #含列表,不可哈希
Traceback (most recent call last):File "<pyshell#27>", line 1, in <module>{"Python","FishC",520,1314,[1,2,3]}
TypeError: unhashable type: 'list'x = {1,2,3}
y = {x,4,5} #集合x是可变的,可变的是不可哈希的
Traceback (most recent call last):File "<pyshell#29>", line 1, in <module>y = {x,4,5}
TypeError: unhashable type: 'set'x = frozenset(x)
y = {x,4,5}

【I】添加一行代码,提高10000倍以上的执行效率,《Python学习之奇技淫巧》,Python交流,鱼C论坛 - Powered by Discuz! (2023_4_10 16_10_09)

image-20260530200825342

以空间换时间

http://www.rkmt.cn/news/1429751.html

相关文章:

  • 神奇的内存管家:Mem Reduct如何让你的Windows电脑重获新生
  • 2026 年中国 AI 创业风向转变:零一万物、百川智能转型,下半场聚焦产品与生存
  • 190、运动控制中的行业应用:半导体设备(晶圆搬运)
  • 踩坑实录:Win11系统下为Jupyter配置MATLAB内核,我遇到的3个报错及解决办法
  • 27考研杨攀|任燕翔|卢欣粉笔101公共课全程班网课讲义PDF
  • 告别资源焦虑:用USB转接芯片CH347在安卓电视盒上DIY一个多功能调试工具(SPI/I2C/GPIO监控与编程)
  • Go2 ROS2 SDK架构揭秘:构建四足机器人的分布式智能控制系统
  • 183、运动控制中的行业应用:工业机器人(六轴)
  • 如何在10分钟内训练专业级AI语音转换模型:Retrieval-based-Voice-Conversion-WebUI终极指南
  • 2026 年 5 月 消防智能照明哪家强?中山国标应急照明厂家权威 top5 榜单 - 资讯纵览
  • ESP32+GC9A01圆形屏玩转视频播放:深入解析SPI驱动与TF卡文件系统那些事儿
  • 保姆级教程:在Ubuntu 20.04上用GTSAM 4.1.1实现IMU预积分因子图优化
  • QMC-Decoder终极指南:快速解锁QQ音乐加密文件,实现音频格式自由转换
  • Kiro MCP + Bedrock 实战:IDE 里测 Prompt、查向量库、调试 RAG 一条龙
  • 修复了国外服务器出现的错误
  • 深度解析10款降AI率网站:找到导师推荐的“无痕降AIGC”终极方案
  • Pythonasyncio子进程管理
  • 从“水缸”到“高速公路”:用生活化比喻彻底搞懂电容的滤波、旁路与去耦(附LTspice仿真)
  • 原型设计工具对比与校园失物招领系统原型设计
  • 别再只会用PEC了!CST材料库保姆级使用指南:从Normal介质到Lossy Metal的实战选择
  • 科瑞昌省电空调选购指南:工业大空间降温选型全攻略 - 资讯纵览
  • Android音乐播放器实战工程:带用户系统、本地数据库与四大组件完整实现
  • 智能电视上网难?TV Bro电视浏览器如何让大屏浏览变得轻松愉悦?
  • 2026护网行动全指南(干货版):从认知到实战,攻防落地可照搬
  • Windows安卓应用安装器:三步实现电脑运行手机应用
  • 3步掌握Unity游戏马赛克移除:UniversalUnityDemosaics完整指南
  • 微信聊天记录永久保存终极指南:如何一键导出所有聊天数据
  • 破解雨衣批发痛点:FEP一体化方法论如何实现高性价比稳定供应? - 资讯纵览
  • 【AI运维生死线】:当LangChain链式调用突然卡死——3层异步栈追踪+实时可观测性注入方案
  • 怎样高效使用Diffuse:专业开发者的5个实战技巧与深度配置指南