集合是 Python 中无序、可变、无重复元素的容器,主要用于数据去重、集合运算(如交集、并集),元素必须是不可变类型(如字符串、数字、元组)。
Python 有两种核心集合类型:普通集合(set)(可变)和冻结集合(frozenset)(不可变)。
- 直接赋值:用大括号
{} 包裹元素,元素间用 , 分隔(注意:空集合不能用 {},否则会创建空字典)。
示例:s1 = {1, 2, 3, "apple"}(自动去重,如 {1,1,2} 最终为 {1,2})
set() 函数:通过可迭代对象(如列表、字符串)创建,支持空集合。
示例 1(去重):s2 = set([1,2,2,3]) # 结果 {1,2,3}
示例 2(空集合):empty_set = set() # 正确创建空集合
- 仅通过
frozenset() 函数创建,元素不可修改,可作为字典键或放入普通集合。
示例:fs = frozenset([1,2,3])(无法执行添加 / 删除操作)
add(element):添加单个不可变元素,若元素已存在则不报错、不操作。
示例:s1.add(4) # s1 变为 {1,2,3,"apple",4}
update(iterable):添加可迭代对象(如列表、字符串)中的所有元素,自动去重。
示例:s1.update([4,5,"banana"]) # s1 变为 {1,2,3,"apple",4,5,"banana"}
remove(element):删除指定元素,若元素不存在则报错 KeyError。
示例:s1.remove(4) # s1 移除元素 4
discard(element):删除指定元素,若元素不存在则不报错、不操作(比 remove 更安全)。
示例:s1.discard(10) # 元素 10 不存在,无操作
pop():随机删除并返回一个元素(因集合无序,无法指定删除位置),空集合调用会报错。
示例:s1.pop() # 随机返回一个元素并移除
clear():清空集合中所有元素,集合变为空集合。
示例:s1.clear() # s1 变为 set()
假设有两个集合:a = {1,2,3,4},b = {3,4,5,6},常见运算如下:
因集合无序,遍历顺序与元素插入顺序无关,直接用 for 循环即可。
示例:
s = {1, "apple", 3.14}
for elem in s:
print(elem)
用 in(存在)或 not in(不存在),效率极高(底层基于哈希表)。
示例:
- 元素不可变性:集合元素必须是不可变类型(如
int、str、tuple),列表(list)、普通集合(set)等可变类型不能作为元素,否则报错 TypeError。
错误示例:s = {[1,2], 3} # 列表作为元素,报错
- 无序性:集合不支持索引访问(如
s[0] 会报错),也不保证元素顺序(Python 3.7+ 普通集合会记录插入顺序,但仍不支持索引)。
- 去重特性:集合会自动删除重复元素,适合快速去重(如将列表转为集合再转回列表:
list(set([1,2,2,3])))。
- 冻结集合的特殊性:
frozenset 不可修改,因此没有 add()、remove() 等方法,但支持所有集合运算(如交集、并集),可作为字典键或放入普通集合。