news 2026/11/5 3:51:24

Python基础:第 07 篇 · 集合 set:去重与关系运算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python基础:第 07 篇 · 集合 set:去重与关系运算

文章目录

  • 专栏导读
  • 第 07 篇 · 集合 set:去重与关系运算
    • 本篇目标
    • 一、创建集合
      • 两大特性
    • 二、增删改查
    • 三、关系运算(集合的核心价值)
      • 判断关系
    • 四、实战场景
      • 场景 1:列表去重
      • 场景 2:找出两份名单的差异
      • 场景 3:共同标签 / 兴趣匹配
      • 场景 4:高性能查找
    • 五、集合推导式
    • 六、frozenset:不可变集合
    • 常见坑
    • 本篇小结
    • 练习题
  • 总结

专栏导读

🔥🔥本文已收录于《30天学习Python从入门到精通》

🉑🉑本专栏专门针对于零基础和需要重新复习巩固的同学所准备的一套基础班教学,从0基础到精通Python,轻松掌握Python,欢迎各位同学订阅,专栏订阅地址:点我直达

🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢迎订阅《Python办公自动化》专栏,订阅地址:点我直达

第 07 篇 · 集合 set:去重与关系运算

作者:小庄学Python | 系列:《Python基础大全》 · 30 篇从零到能写项目

本篇目标

  • 理解集合"无序、唯一"的特性
  • 掌握交集、并集、差集等关系运算
  • 学会用集合高效去重
  • 了解 frozenset 的使用场景

一、创建集合

s1={1,2,3}s2=set([1,2,2,3,3])# {1, 2, 3} 自动去重s3=set("hello")# {'h', 'e', 'l', 'o'} 去重字符empty=set()# 空集合

⚠️{}是空字典,不是空集合!空集合只能用set()。

两大特性

  1. 元素唯一:自动去重
  2. 无序:没有下标,不能用s[0]
s={3,1,2}print(s)# {1, 2, 3} 打印顺序不保证s[0]# ❌ TypeError: 'set' object is not subscriptable

二、增删改查

s={1,2,3}s.add(4)# 加一个元素s.update([5,6])# 批量加s.remove(1)# 删除,不存在会报错s.discard(100)# 删除,不存在也不报错 ✅ 推荐s.pop()# 随机删一个并返回(因为无序)s.clear()# 清空2ins# True ← 集合的 in 查询是 O(1),比列表快得多len(s)# 长度

三、关系运算(集合的核心价值)

a={1,2,3,4}b={3,4,5,6}a&b# {3, 4} 交集:两边都有a|b# {1,2,3,4,5,6} 并集:合起来去重a-b# {1, 2} 差集:a 有 b 没有b-a# {5, 6} 差集:b 有 a 没有a^b# {1, 2, 5, 6} 对称差集:只在一边出现

等价的方法写法(更语义化):

a.intersection(b)a.union(b)a.difference(b)a.symmetric_difference(b)

判断关系

{1,2}.issubset(a)# True 是子集a.issuperset({1,2})# True 是超集{1,2}.isdisjoint({5,6})# True 没有交集

四、实战场景

场景 1:列表去重

lst=[1,2,2,3,3,3,1]unique=list(set(lst))# [1, 2, 3] 但顺序会乱!# 保持原顺序的去重seen=set()result=[]foriteminlst:ifitemnotinseen:seen.add(item)result.append(item)# result = [1, 2, 3] 顺序保持 ✅# Python 3.7+ 一行搞定result=list(dict.fromkeys(lst))

场景 2:找出两份名单的差异

yesterday={"张三","李四","王五"}today={"李四","王五","赵六"}print("新来的:",today-yesterday)# {'赵六'}print("离开的:",yesterday-today)# {'张三'}print("一直都在:",today&yesterday)# {'李四', '王五'}

场景 3:共同标签 / 兴趣匹配

user_a_tags={"Python","摄影","健身","咖啡"}user_b_tags={"Python","旅游","咖啡","电影"}match=user_a_tags&user_b_tagsprint(f"共同兴趣:{match}")print(f"匹配度:{len(match)/len(user_a_tags|user_b_tags):.0%}")

场景 4:高性能查找

# 判断 100 万条数据里有没有某元素big_list=list(range(1_000_000))big_set=set(big_list)# 999999 in big_list → 需要遍历,慢# 999999 in big_set → 哈希查找,瞬间返回

数据量大且要频繁in判断时,先把列表转成集合,性能提升可能是上千倍。


五、集合推导式

{x**2forxinrange(5)}# {0, 1, 4, 9, 16}{c.lower()forcin["A","b","A"]}# {'a', 'b'}{wforwintext.split()iflen(w)>3}# 长度大于3的单词

六、frozenset:不可变集合

fs=frozenset([1,2,3])fs.add(4)# ❌ 不可变# 用途:可以作为字典的 key 或放进另一个集合d={frozenset({1,2}):"这一组"}

常见坑

坑说明
{}创建的是空字典空集合用set()
集合无序,不能索引需要顺序请用列表
set(lst)去重会打乱顺序保序用dict.fromkeys()
元素必须是可哈希的列表、字典、集合不能作为集合元素
pop()删的是随机元素别依赖它删"最后一个"
# 不可哈希元素会报错{[1,2],[3,4]}# ❌ TypeError: unhashable type: 'list'{(1,2),(3,4)}# ✅ 元组可以

本篇小结

  • 集合 = 无序 + 唯一,创建空集合用set()
  • &交、|并、-差、^对称差
  • 去重最快:set(lst);保序去重:list(dict.fromkeys(lst))
  • 大量in查询时,集合比列表快得多

练习题

  1. 有列表[1,1,2,2,3,4,4,5],用两种方法去重(一种保序、一种不保序)。
  2. 找出两个字符串中都出现过的字符,如"hello"和"world"→{'l', 'o'}。
  3. 随机生成 100 个 1~50 的整数,统计其中有多少个不同的数字。

下一篇:条件判断 if——让程序学会做选择。

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 3:49:03

商业资产卖家一篇文章看懂商业拍卖的十大问题

长三角商业房产业主拍卖处置资产十大关切2026年上半年,长三角商办市场呈现分化格局。Colliers数据显示,杭州甲级写字楼空置率降至18.9%,环比下降0.9个百分点,净有效租金3.1元/平方米/天,租金降幅收窄至2.4%。南京、苏州…

作者头像 李华
网站建设 2026/11/5 3:47:35

深入理解 I²C:总线电容、上拉电阻、时钟拉伸与电平兼容性

在 IC 硬件设计中,通信异常不一定是软件配置问题。总线电容过大、上拉电阻选择不合理、电平不兼容,都可能导致通信失败。 理解 IC,不能只停留在通信时序,还需要从电气特性、RC 充放电、总线控制机制等方面分析。 本文重点讨论几个实际设计中容易遇到的问题。 一、为什么…

作者头像 李华
网站建设 2026/11/5 3:47:01

基于SpringBoot和Vue的项目评审系统

基于SpringBoot和Vue的项目评审系统的设计与实现(万字文档源代码数据库脚本说明文档可远程调试)系统介绍: 基于SpringBoot和Vue实现的项目评审系统采用前后端分离的架构方式,搭配MySQL数据库。系统设计了三类角色,分别是申报人、评审专家、管…

作者头像 李华
网站建设 2026/11/5 3:45:36

KeymouseGo 免费鼠标键盘录制工具:如何快速安装并上手自动化回放

KeymouseGo 免费鼠标键盘录制工具:如何快速安装并上手自动化回放 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo …

作者头像 李华