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

Python Set() 完全指南:从入门到精通

Python Set() 完全指南:从入门到精通

Set(集合)是Python中一种非常有用的内置数据类型,它提供了高效的成员检测和消除重复元素的功能。本文将带你全面了解Python中的set(),从基础概念到高级用法。

一、什么是Set?

Set是Python中的一种无序、可变、不重复元素的集合数据类型。它类似于数学中的集合概念,支持并集、交集、差集等操作。

# 创建一个set
fruits = {'apple', 'banana', 'orange', 'apple'}
print(fruits)  # 输出: {'banana', 'orange', 'apple'} (重复的'apple'被自动去除)

二、创建Set的多种方式

  1. 使用花括号 {}
colors = {'red', 'green', 'blue'}
  1. 使用 set() 构造函数
numbers = set([1, 2, 3, 4, 5])  # 从列表创建
letters = set("hello")          # 从字符串创建,结果为 {'h', 'e', 'l', 'o'}
  1. 使用集合推导式
squares = {x**2 for x in range(10)}

三、Set的基本操作

1. 添加元素

fruits = {'apple', 'banana'}
fruits.add('orange')      # 添加单个元素
fruits.update(['kiwi', 'mango'])  # 添加多个元素

2. 删除元素

fruits.remove('banana')   # 如果元素不存在会引发KeyError
fruits.discard('kiwi')    # 安全删除,元素不存在也不会报错
popped = fruits.pop()     # 随机删除并返回一个元素
fruits.clear()            # 清空集合

3. 成员检测

if 'apple' in fruits:print("苹果在集合中")

4. 遍历集合

for fruit in fruits:print(fruit)

四、Set的数学运算

Set支持丰富的数学集合运算:

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}# 并集
print(a | b)      # {1, 2, 3, 4, 5, 6}
print(a.union(b)) # 同上# 交集
print(a & b)             # {3, 4}
print(a.intersection(b)) # 同上# 差集
print(a - b)            # {1, 2}
print(a.difference(b))  # 同上# 对称差集(只在a或b中,但不同时在两者中)
print(a ^ b)                     # {1, 2, 5, 6}
print(a.symmetric_difference(b)) # 同上

五、Set的常用方法

方法描述
len(s)返回集合元素个数
copy()返回集合的浅拷贝
isdisjoint(other)如果两个集合没有共同元素返回True
issubset(other)检查是否是other的子集
issuperset(other)检查是否包含other的所有元素

六、FrozenSet - 不可变集合

Python还提供了frozenset类型,它是不可变的集合,可以作为字典的键或另一个集合的元素。

immutable = frozenset([1, 2, 3])

七、Set的应用场景

  1. 去重:快速去除列表中的重复元素
unique_list = list(set(duplicate_list))
  1. 成员测试:比列表更高效的成员检测
if item in my_set:  # O(1)时间复杂度# do something
  1. 数学运算:处理集合关系问题
# 找出两个列表的共同元素
common = set(list1) & set(list2)
  1. 数据筛选
# 筛选出只出现一次的元素
unique_elements = set(all_elements) - set(duplicate_elements)

八、性能考虑

  • Set使用哈希表实现,查找操作平均时间复杂度为O(1)
  • 相比列表(list),set的成员检测效率更高
  • 但set不记录元素位置,无法通过索引访问

九、总结

Python的set是一种强大的数据结构,特别适合需要快速成员检测和去重的场景。通过掌握set的基本操作和集合运算,你可以编写出更简洁、高效的Python代码。

希望这篇教程对你有所帮助!如果有任何问题,欢迎在评论区留言讨论。

http://www.dtcms.com/a/265467.html

相关文章:

  • R语言开发记录,一
  • 前端-HTML-day1
  • Rust Web 全栈开发(二):构建 HTTP Server
  • 主流分布式中间件及其选型
  • locate命令的原理是啥
  • OpenCV CUDA模块设备层-----在GPU 上高效地执行两个 uint 类型值的最大值比较函数vmax2()
  • Frida:配置自动补全 in VSCode
  • 搭建VirtualBox-6+vagrant_2+docker+mysql5.7的步骤
  • 客户案例 | 某新能源车企依托Atlassian工具链+龙智定制开发服务,打造符合ASPICE标准的研发管理体系
  • 云原生系统DOCKER中容器系统搭建
  • Python字符与ASCII转换方法
  • Ubuntu Gnome 安装和卸载 WhiteSur-gtk-theme 类 Mac 主题的正确方法
  • vue2+elementui使用compressorjs压缩上传的图片
  • Euler2203安装.NetCore6.0环境操作步骤
  • python安装虚拟环境
  • Python 物联网(IoT)与边缘计算开发实战(1)
  • 优雅草蜻蜓R实时音视频会议系统云原生私有化部署方案深度解析-优雅草卓伊凡|贝贝|clam|麻子|夜辰
  • Docker 容器资源限制
  • 9.Docker的容器数据卷使用(挂载)
  • ATE FT ChangeKit学习总结-20250630
  • 网络的封包与拆包
  • 基于Java的企业项目管理与协作系统设计与实现
  • Dataset Distillation by Matching Training Trajectories(2203.11932)
  • Eclipse主题拓展
  • mysql索引的底层原理是什么?如何回答?
  • Go语言的sync.Once和sync.Cond
  • Redis 源码 tar 包安装 Redis 哨兵模式(Sentinel)
  • Go调度器的抢占机制:从协作式到异步抢占的演进之路|Go语言进阶(7)
  • 价值实证:数字化转型标杆案例深度解析
  • 网络地址与子网划分:一次性搞清 CIDR、VLSM 和子网掩码