[Python编程] Python3 集合
对于 Python 初学者来说,掌握常用的数据结构是提升编程能力的关键。集合(set)作为 Python 中独特的数据结构,凭借 “无序不重复” 的特性,在去重、关系运算等场景中发挥着重要作用。
一、什么是 Python3 集合?
简单来说,Python3 集合(set)是一个无序的、不包含重复元素的序列。它就像一个 “去重容器”,自动过滤重复数据,同时支持交集、并集、差集等数学中的集合运算,非常适合处理需要 “唯一性” 或 “关系判断” 的问题。
比如统计用户输入的不重复关键词、判断两个列表的共同元素等场景,用集合处理会比列表更高效。
二、如何创建 Python3 集合?
创建集合有两种常用方式:用大括号{}
直接创建,或用set()
函数从其他数据结构(如列表、元组)转换而来。
1️⃣方式 1:大括号{}
创建
直接在大括号中填入元素,元素之间用逗号分隔即可。
注意:大括号{}
也用于创建字典,但字典是 “键值对” 形式(如{key: value}
),而集合只有 “元素”,这点要区分开。
python
运行
# 用大括号创建集合
set1 = {1, 2, 3, 4}
# 打印集合类型,确认是set
print(type(set1)) # 输出:<class 'set'>
2️⃣方式 2:set()
函数创建
如果已有列表、元组等数据,可通过set()
函数将其转换为集合,同时自动去除重复元素。
python
运行
# 从列表创建集合(列表中有重复元素)
list1 = [4, 5, 6, 7, 7] # 列表中的7重复
set2 = set(list1)
print(set2) # 输出:{4, 5, 6, 7}(重复的7被自动删除)
print(type(set2)) # 输出:<class 'set'>
3️⃣关键特性:自动去重
集合最核心的特性之一就是 “不允许重复元素”,无论创建时是否包含重复值,最终都会被合并为唯一元素。
python
运行
# 示例:统计购物篮中的不重复水果
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
# 转换为集合,自动去重
unique_fruits = set(basket)
print(unique_fruits) # 输出:{'apple', 'orange', 'pear', 'banana'}
三、Python3 集合的基本操作
掌握集合的 “增、删、查、清空” 等基本操作,是使用集合的基础。以下是最常用的 5 种基本操作:
1️⃣添加元素
有两种添加元素的方法,适用于不同场景:
s.add(x)
:向集合s
中添加单个元素x
。如果x
已存在,不会报错,也不会重复添加。s.update(x)
:向集合s
中添加多个元素,x
可以是列表、元组、字典或另一个集合(会自动提取元素)。
python
运行
set1 = {1, 2, 3, 4}
# 1. add() 添加单个元素
set1.add(5)
print(set1) # 输出:{1, 2, 3, 4, 5}# 2. update() 添加多个元素(这里添加一个集合)
set1.update({6, 7, 8})
print(set1) # 输出:{1, 2, 3, 4, 5, 6, 7, 8}# update() 也支持列表
set1.update([9, 10])
print(set1) # 输出:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
2️⃣移除元素
移除元素有 3 种常用方法,核心区别在于 “元素不存在时是否报错”:
s.remove(x)
:删除集合s
中的元素x
。如果x
不存在,会直接报错(初学者需注意)。s.discard(x)
:删除集合s
中的元素x
。如果x
不存在,不会报错(更安全,推荐优先使用)。s.pop()
:随机删除集合中的一个元素(因为集合无序,无法指定删除位置),返回被删除的元素。
python
运行
set1 = {1, 2, 3, 4, 5, 6, 7, 8}
# 1. remove() 删除存在的元素
set1.remove(2)
print(set1) # 输出:{1, 3, 4, 5, 6, 7, 8}# 2. discard() 删除不存在的元素(不报错)
set1.discard(9) # 9不在集合中,无报错,集合不变
print(set1) # 输出:{1, 3, 4, 5, 6, 7, 8}# 3. pop() 随机删除一个元素
deleted_element = set1.pop()
print("被删除的元素:", deleted_element) # 输出可能是1(随机)
print(set1) # 输出:{3, 4, 5, 6, 7, 8}(假设删除了1)
3️⃣计算集合元素个数
用len(s)
函数即可获取集合s
中元素的数量,用法和列表、字符串一致。
python
运行
set1 = {1, 2, 3, 4}
print(len(set1)) # 输出:4
4️⃣清空集合
用s.clear()
可以清空集合中的所有元素,清空后集合变为空集合(表示为set()
,而非{}
,因为{}
代表空字典)。
python
运行
set1 = {1, 2, 3, 4}
set1.clear()
print(set1) # 输出:set()
5️⃣判断元素是否存在
用x in s
判断元素x
是否在集合s
中,返回True
(存在)或False
(不存在),效率比列表的in
操作更高。
python
运行
set1 = {1, 2, 3, 4}
print(2 in set1) # 输出:True
print(5 in set1) # 输出:False
四、Python3 集合的内置方法(全解析)
除了基本操作,集合还提供了丰富的内置方法,用于实现交集、并集、子集判断等功能。下表整理了所有常用内置方法,包含功能说明和简单示例:
方法名 | 功能说明 | 示例(以set_a = {1,2,3} , set_b = {3,4,5} 为例) |
---|---|---|
add(x) | 向集合添加单个元素x | set_a.add(4) → {1,2,3,4} |
clear() | 清空集合所有元素,变为空集合 | set_a.clear() → set() |
copy() | 拷贝一个新集合(浅拷贝,修改新集合不影响原集合) | new_set = set_a.copy() → {1,2,3} |
difference(set2) | 返回差集:原集合有、但set2 没有的元素(原集合不变) | set_a.difference(set_b) → {1,2} |
difference_update(set2) | 原地差集:删除原集合中与set2 相同的元素(原集合被修改) | set_a.difference_update(set_b) → set_a 变为{1,2} |
discard(x) | 删除元素x ,不存在则不报错 | set_a.discard(5) → set_a 仍为{1,2,3} |
intersection(set2) | 返回交集:原集合和set2 都有的元素 | set_a.intersection(set_b) → {3} |
isdisjoint(set2) | 判断两个集合是否 “无交集”,无交集返回True ,有则返回False | set_a.isdisjoint(set_b) → False (有交集 3) |
issubset(set2) | 判断原集合是否是set2 的子集(原集合所有元素都在set2 中) | set_a.issubset({1,2,3,4}) → True |
issuperset(set2) | 判断原集合是否是set2 的超集(set2 所有元素都在原集合中) | set_a.issuperset({1,2}) → True |
pop() | 随机删除一个元素并返回该元素 | set_a.pop() → 可能返回 1,set_a 变为{2,3} |
remove(x) | 删除元素x ,不存在则报错 | set_a.remove(5) → 报错(KeyError) |
symmetric_difference(set2) | 返回对称差集:只在原集合或只在set2 中的元素(无交集元素) | set_a.symmetric_difference(set_b) → {1,2,4,5} |
symmetric_difference_update(set2) | 原地对称差集:原集合变为对称差集元素(原集合被修改) | set_a.symmetric_difference_update(set_b) → set_a 变为{1,2,4,5} |
union(set2) | 返回并集:原集合和set2 的所有不重复元素 | set_a.union(set_b) → {1,2,3,4,5} |
update(x) | 向集合添加多个元素,x 可是列表、元组、集合等 | set_a.update([4,5]) → {1,2,3,4,5} |
len(s) | (函数,非方法)返回集合元素个数 | len(set_a) → 3 |
五、初学者常见问题 & 注意事项
-
空集合的创建:不能用
{}
创建空集合({}
是空字典),必须用set()
。
错误:empty_set = {}
(类型是 dict);正确:empty_set = set()
(类型是 set)。 -
remove()
vsdiscard()
:删除元素时,优先用discard()
,避免因元素不存在导致报错;如果确认元素一定存在,可用remove()
。 -
集合的无序性:集合没有索引,不能通过
set[0]
这样的方式访问元素,只能通过in
判断存在性或for
循环遍历。 -
元素类型限制:集合的元素必须是 “不可变类型”(如整数、字符串、元组),不能是列表、字典等可变类型(会报错)。
错误:set1 = {[1,2], 3}
(列表是可变类型);正确:set1 = {(1,2), 3}
(元组是不可变类型)。
总结
Python3 集合是一种 “高效去重 + 关系运算” 的工具,核心特性是无序、不重复。本文从定义、创建、基本操作到内置方法,覆盖了集合的所有重点知识,尤其适合初学者入门。