Python 集合(Set)核心知识点

 

集合是 Python 中无序、可变、无重复元素的容器,主要用于数据去重、集合运算(如交集、并集),元素必须是不可变类型(如字符串、数字、元组)。

1. 集合的分类与创建

Python 有两种核心集合类型:普通集合(set)(可变)和冻结集合(frozenset)(不可变)。

(1)普通集合(set)创建

  • 直接赋值:用大括号 {} 包裹元素,元素间用 , 分隔(注意:空集合不能用 {},否则会创建空字典)。
    示例: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() # 正确创建空集合

(2)冻结集合(frozenset)创建

  • 仅通过 frozenset() 函数创建,元素不可修改,可作为字典键或放入普通集合。
    示例:fs = frozenset([1,2,3])(无法执行添加 / 删除操作)

2. 集合的核心操作(以普通集合为例)

(1)添加元素

  • 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"}

(2)删除元素

  • remove(element):删除指定元素,若元素不存在则报错 KeyError
    示例:s1.remove(4) # s1 移除元素 4
  • discard(element):删除指定元素,若元素不存在则不报错、不操作(比 remove 更安全)。
    示例:s1.discard(10) # 元素 10 不存在,无操作
  • pop():随机删除并返回一个元素(因集合无序,无法指定删除位置),空集合调用会报错。
    示例:s1.pop() # 随机返回一个元素并移除
  • clear():清空集合中所有元素,集合变为空集合。
    示例:s1.clear() # s1 变为 set()

3. 集合的核心运算(数学集合操作)

假设有两个集合:a = {1,2,3,4}b = {3,4,5,6},常见运算如下:

运算类型符号表示方法表示功能描述结果示例 
交集 a & b a.intersection(b) 取两集合共有的元素 {3,4}  
并集 `a b` a.union(b) 取两集合所有不重复元素 {1,2,3,4,5,6}
差集 a - b a.difference(b) 取仅在 a 中存在的元素 {1,2}  
对称差集 a ^ b a.symmetric_difference(b) 取仅在 a 或仅在 b 中的元素 {1,2,5,6}  
子集判断 a <= b a.issubset(b) 判断 a 是否完全包含于 b False(a 不是 b 的子集)  
超集判断 a >= b a.issuperset(b) 判断 a 是否完全包含 b False(a 不是 b 的超集)  

4. 集合的遍历与判断

(1)遍历集合

因集合无序,遍历顺序与元素插入顺序无关,直接用 for 循环即可。
示例:

s = {1, "apple", 3.14}
for elem in s:
    print(elem)  # 输出顺序可能为 1, 3.14, "apple"
 

(2)判断元素是否存在

用 in(存在)或 not in(不存在),效率极高(底层基于哈希表)。
示例:
 
print(2 in s)    # 输出 False(s 中无元素 2)
print("apple" in s)  # 输出 True
 

5. 集合的注意事项

  1. 元素不可变性:集合元素必须是不可变类型(如 intstrtuple),列表(list)、普通集合(set)等可变类型不能作为元素,否则报错 TypeError
    错误示例:s = {[1,2], 3} # 列表作为元素,报错
  2. 无序性:集合不支持索引访问(如 s[0] 会报错),也不保证元素顺序(Python 3.7+ 普通集合会记录插入顺序,但仍不支持索引)。
  3. 去重特性:集合会自动删除重复元素,适合快速去重(如将列表转为集合再转回列表:list(set([1,2,2,3])))。
  4. 冻结集合的特殊性:frozenset 不可修改,因此没有 add()remove() 等方法,但支持所有集合运算(如交集、并集),可作为字典键或放入普通集合。
posted @ 2025-07-27 03:36  我歌且谣  阅读(6)  评论(0)    收藏  举报