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

LLM系列:1.python入门:8.集合型对象(SetFrozenset)

集合型对象(Set&Frozenset)

一. 集合基础

集合(set)是一种无序且可变类型的容器。

可以将集合看作是字典的一种特殊形式——由字典的 Keys 所组成的列表。因此集合具备两个核心特征:其一,集合内的元素必须是不可变对象类型(如数字、字符串、元组);其二,集合内的元素不能重复。

冻集合(frozenset)则是集合的不可变版本,除了不支持修改(增、删)操作外,其他基本性质与运算和集合完全一致。

1. 集合与冻集合的创建

(1). 集合的直接创建

使用大括号{}进行标注,元素之间用逗号隔开。

# 直接创建集合s1={1,2,3}# 无序性及包含不同类型(必须是不可变类型)的体现s2={1,2,'Hi',(1,2,3)}# 注:由于 {} 表示空字典,创建空集合必须使用 set()s_empty=set()
(2). 使用 set() 函数

可将列表、元组、字符串、range 等可迭代对象转化为集合。

# 列表转集合set([1,2,3])# {1, 2, 3}# 字符串转集合(会被拆分为单个字符并去重)set('Hello')# {'H', 'e', 'l', 'o'}
(3). 冻集合的使用 (frozenset)

冻集合只能通过frozenset()函数进行创建。一旦创建,其内部元素不可被修改或删除。

# 将列表或集合转化为冻集合fr1=frozenset([1,2,3])fr2=frozenset({1,2,3})# 注:冻集合作为不可变对象,自身也可以作为另一个集合的元素set([1,2,frozenset([1,2])])
(4). 利用集合去重

利用集合元素不可重复的特性,可以非常方便地对列表进行去重操作。注:去重过程会自动调整元素顺序,本质上是无序变量转化为有序变量。

l1=[1,1,2,3]# 转化为集合去重,再转化为列表ls1=list(set(l1))# [1, 2, 3]

二. 集合的常用方法与操作

1. add - 添加元素

作用:在集合中添加一个新元素。由于集合无序,因此没有特定的插入位置。冻集合不支持此方法。

set.add(elem)

参数:

  • 元素 (elem): 需要添加到集合中的目标对象(Any,必须是不可变类型)。

返回值:

  • 成功: 无返回值(NoneType),直接在原集合对象上进行修改。

示例:

s1={1,2,3}# 在 s1 集合中添加元素 4s1.add(4)# s1 变为 {1, 2, 3, 4}

2. remove - 删除指定元素

作用:删除集合中指定的元素。若指定元素不存在,则会报错。冻集合不支持此方法。

set.remove(elem)

参数:

  • 元素 (elem): 需要从集合中移除的目标对象(Any)。

返回值:

  • 成功: 无返回值(NoneType),直接在原集合对象上进行修改。

示例:

s1={1,2,3,4}# 删除集合中的 4s1.remove(4)# s1 变为 {1, 2, 3}

3. pop - 随机弹出元素

作用:随机删除并返回集合中的一个元素(实际是按照内部哈希重排列后的顺序进行删除)。冻集合不支持此方法。

set.pop()

参数:

  • 无参数(None)。

返回值:

  • 成功: 返回被弹出的那个元素对象(Any)。如果集合为空则会报错。

示例:

s2={(1,2),1,2,'Hi'}# 随机删除一个元素,并将其返回val=s2.pop()# val 可能变为(1, 2)# s2 变为 {1, 2, 'Hi'}

4. intersection或&- 交集运算

作用:提取出两个或多个集合中共同拥有的元素。

set1&set2set.intersection(other)

参数:

  • 其他集合 (other): 参与交集运算的其他可迭代对象(Iterable,如 set 或 frozenset)。

返回值:

  • 成功: 返回一个新的集合对象(set 或 frozenset),包含两者共同的元素。
  • 注: 还可以使用intersection_update()直接在原集合上覆盖更新,不返回新集合。

示例:

s1={1,2,3}s2={2,3,4}# 使用运算符 & 或 intersection 方法s1&s2# 返回 {2, 3}s1.intersection(s2)# 返回 {2, 3}# 使用 intersection_update 方法(原地修改)s1.intersection_update(s2)# s1 变为 {2, 3}

5. union或|- 并集运算

作用:将两个集合中的所有元素合并在一起,并自动去重。

set1|set2set.union(other)

参数:

  • 其他集合 (other): 参与并集运算的其他可迭代对象(Iterable)。

返回值:

  • 成功: 返回一个新的集合对象(set 或 frozenset),包含两者的所有去重元素。
  • 注: 还可以使用update()方法直接将新元素并入原集合,不返回新集合。

示例:

s1={1,2,3}s2={2,3,4}# 使用运算符 | 或 union 方法s1|s2# 返回 {1, 2, 3, 4}s1.union(s2)# 返回 {1, 2, 3, 4}# 使用 update 方法(原地修改)s1.update(s2)# s1 变为 {1, 2, 3, 4}

6. difference或-- 差集运算

作用:提取出存在于当前集合中,但不存在于另一个集合中的元素(当前集合减去共同部分)。

set1-set2set.difference(other)

参数:

  • 其他集合 (other): 参与差集运算的其他可迭代对象(Iterable)。

返回值:

  • 成功: 返回一个新的集合对象(set 或 frozenset)。
  • 注: 还可以使用difference_update()直接在原集合上覆盖更新。

示例:

s1={1,2,3}s2={2,3,4}# 存在于 s1 中但不在 s2 中的元素s1-s2# 返回 {1}s1.difference(s2)# 返回 {1}# 使用 difference_update 方法(原地修改)s1.difference_update(s2)# s1 变为 {1}

7. symmetric_difference或^- 补集运算 (对称差集)

作用:提取出两个集合中不重复的元素集合(即两者并集减去两者的交集)。

set1^set2set.symmetric_difference(other)

参数:

  • 其他集合 (other): 参与补集运算的其他可迭代对象(Iterable)。

返回值:

  • 成功: 返回一个新的集合对象(set 或 frozenset)。
  • 注: 还可以使用symmetric_difference_update()直接在原集合上覆盖更新。

示例:

s1={1,2,3}s2={2,3,4}# 提取不重复的独立元素s1^s2# 返回 {1, 4}s1.symmetric_difference(s2)# 返回 {1, 4}# 使用 symmetric_difference_update 方法(原地修改)s1.symmetric_difference_update(s2)# s1 变为 {1, 4}

8. issubset - 子集判断

作用:判断当前集合是否被完全包含在另一个集合中。

set.issubset(other)

参数:

  • 其他集合 (other): 作为父集参考的目标容器(Iterable)。

返回值:

  • 成功: 如果被完全包含则返回True,否则返回False(bool)。

示例:

s1={1,2,3}s2={2,3}# 判断 s2 是否是 s1 的子集s2.issubset(s1)# 返回 True

9. issuperset - 超集判断

作用:判断当前集合是否完全包含了另一个集合。

set.issuperset(other)

参数:

  • 其他集合 (other): 作为子集参考的目标容器(Iterable)。

返回值:

  • 成功: 如果完全包含对方则返回True,否则返回False(bool)。

示例:

s1={1,2,3}s2={2,3}# 判断 s1 是否包含了 s2s1.issuperset(s2)# 返回 True

10. isdisjoint - 无交集判断

作用:判断两个集合是否完全没有共同元素(即是否有交集)。

set.isdisjoint(other)

参数:

  • 其他集合 (other): 需要参与对比的另一集合(Iterable)。

返回值:

  • 成功: 如果两个集合完全没有交集,则返回True;如果有任何相同元素,则返回False(bool)。

示例:

s3={1,2}s4={3}# 判断 s3 和 s4 是否完全不相交s3.isdisjoint(s4)# 返回 True
http://www.jsqmd.com/news/652255/

相关文章:

  • EXCEL跨工作簿高效搜索:一键定位多表数据并提取目标单元格
  • 扩散模型做异常检测太慢?手把手教你用AnoDDPM的‘部分扩散’策略提速10倍
  • 好用的东莞高新技术企业认定咨询服务
  • 免费AIGC检测怎么选?实用工具分享帮你避坑
  • 兰亭妙微 UI 设计|蓝色配色实战指南:3类方案+5套公式,界面高级感速成 - ui设计公司兰亭妙微
  • 舞台突然 “罢工”?别慌!广州丁丁让演出零中断!!! - GrowthUME
  • 全球轮胎帘子布市场深度剖析:2026-2032期间年复合增长率(CAGR)为5.2%
  • CT扫描背后的魔法:5分钟搞懂滤波反投影(FBP),并用NumPy从零实现一个简易版
  • Windows任务栏美化终极指南:5分钟学会TranslucentTB透明效果设置
  • 重大利好!跨境电商再获政策支持,行业迎来新机遇
  • K8s StatefulSet 状态保持逻辑
  • 当儿童出现学习困难时,如何判断是否患有多动症?
  • KingbaseES V8自动备份踩坑记:从Expect脚本到环境变量,我遇到的坑和最终方案
  • 好用的东莞高新技术企业认定咨询专家
  • 论文查重=开盲盒?好写作AI说:NO!
  • Windows驱动管理终极指南:Driver Store Explorer 5分钟上手教程
  • LeetCode 3634. 使数组平衡的最少移除数目 详细技术解析
  • 告别ACE,拥抱muduo:一个Linux C++网络库的诞生与设计哲学
  • 别再死记硬背MobileNet了!手把手带你拆解Depthwise Separable Convolution的计算量与访存瓶颈
  • 机器学习中的决策树
  • 电力系统优化调度:MATLAB代码实现机组组合问题的混合整数线性模型
  • 【学习笔记】深度拆解 Claude Code:12 个可复用的 Agentic Harness 设计模式
  • Dify+本地大模型:构建私有化文件智能问答系统
  • 华中科技大学 计算机组成原理 educoder Logisim平台 存储系统设计实战解析
  • 金融数据获取终极指南:如何使用AKShare免费财经接口库
  • Altium Designer 09实战:5分钟搞定0805贴片电阻3D模型(附规格书参数对照)
  • 从100uA到4uA:RTC纽扣电池电路限流电阻选型实战解析
  • 5分钟掌握HS2-HF_Patch:游戏体验全面升级的完整解决方案
  • 毕业论文不用愁!SpeedAI科研小助手,高效降AIGC首选工具
  • 以太网底层设计原理:从帧结构到全双工演进