Python 的 set 是无序、不重复、可变的哈希表结构,支持 O(1) 查找与集合运算;可用于快速去重(但失序),有序去重用 dict.fromkeys();元素须可哈希,空集用 set() 创建。

Python 的 set 是一种无序、不重复、可变的内置数据类型,特别适合去重和集合运算。它底层基于哈希表实现,查找、插入、删除平均时间复杂度为 O(1),效率很高。
用 set 快速去重
列表、元组等序列中若有重复元素,转成 set 可一键去重(但会丢失原有顺序):
-
list(set([1, 2, 2, 3, 3, 4]))→[1, 2, 3, 4](顺序不保证) - 若需保持首次出现顺序,可用
dict.fromkeys():list(dict.fromkeys([2, 1, 3, 1, 2]))→[2, 1, 3] - 字符串去重:
set("hello")→{'h', 'e', 'l', 'o'}(注意:'l'只保留一个)
基础集合运算(操作符与方法)
set 支持数学意义上的交、并、差、对称差等运算,既可用操作符(如 &、|),也可用对应方法(如 .intersection())。操作符要求两边都是 set;方法则更灵活,可接受任意可迭代对象。
-
交集(共同元素):
a & b或a.intersection(b) -
并集(所有不重复元素):
a | b或a.union(b) -
差集(a 有、b 没有):
a - b或a.difference(b) -
对称差集(只在其中一个里):
a ^ b或a.symmetric_difference(b)
常用增删查改操作
set 是可变类型,支持动态修改:
立即学习“Python免费学习笔记(深入)”;
- 添加单个元素:
s.add(x)(若已存在,无影响) - 批量添加:
s.update(iterable),如s.update([1,2,3])或s.update("abc") - 删除元素:
s.remove(x)(不存在报错),s.discard(x)(不存在也不报错) - 随机弹出一个:
s.pop()(无索引概念,不可预测删哪个) - 清空:
s.clear()
注意事项与常见陷阱
使用 set 时需留意几个关键点:
- set 中的元素必须是可哈希的(immutable),不能包含 list、dict、set 等可变类型;但可以包含 int、str、tuple(且 tuple 内元素也需可哈希)
- 空 set 必须用
set()创建,{}是空字典 - 判断是否包含某元素用
in(高效),不要用list.index()那类低效方式 - 嵌套结构去重?先转为可哈希形式,例如将 list 转成 tuple:
set(map(tuple, [[1,2], [3,4], [1,2]]))→{(1, 2), (3, 4)}










