在 Python 的基础数据结构中,除了列表(list)、元组(tuple)、字典(dict),还有一种特殊但非常实用的数据类型——集合(set)。 集合的最大特点是:不重复、无序、可进行集合运算。 它常用于去重、数据筛选、关系判断等场景,是数据处理中的高效利器。
一 什么是集合(set)
集合(Set)是一种 无序、可变 的数据容器, 用于存放 不重复的元素。
在 Python 中,可以通过 {} 或 set() 创建集合。
1fruits = {"apple", "banana", "cherry"} 2print(fruits) # {'banana', 'cherry', 'apple'} 3
集合中的元素是 唯一的,如果你放入重复项,Python 会自动去重。
1nums = {1, 2, 2, 3, 3, 3} 2print(nums) # {1, 2, 3} 3
二 创建集合的几种方式
1. 使用花括号 {}
1colors = {"red", "green", "blue"} 2
2. 使用 set() 函数
1numbers = set([1, 2, 3, 4]) 2
3. 创建空集合
⚠ 注意:创建空集合必须用 set(), 因为 {} 默认是一个空字典。
1empty_set = set() 2print(type(empty_set)) # <class 'set'> 3
三 集合的常见操作
1. 添加元素
1s = {1, 2, 3} 2s.add(4) 3print(s) # {1, 2, 3, 4} 4
2. 更新(合并)多个元素
1s.update([5, 6, 7]) 2print(s) # {1, 2, 3, 4, 5, 6, 7} 3
3. 删除元素
1s.remove(3) # 删除指定元素,不存在时报错 2s.discard(10) # 删除指定元素,不存在也不报错 3s.pop() # 随机删除一个元素 4s.clear() # 清空集合 5
四 集合的运算(重点)
集合支持多种数学意义上的集合运算,非常直观。
假设我们有以下两个集合:
1A = {1, 2, 3, 4} 2B = {3, 4, 5, 6} 3
| 运算 | 符号 | 示例 | 结果 | ||
|---|---|---|---|---|---|
| 并集 | ` | ` | `A | B` | {1, 2, 3, 4, 5, 6} |
| 交集 | & | A & B | {3, 4} | ||
| 差集 | - | A - B | {1, 2} | ||
| 对称差集 | ^ | A ^ B | {1, 2, 5, 6} |
示例代码:
1print(A | B) # 并集 2print(A & B) # 交集 3print(A - B) # 差集 4print(A ^ B) # 对称差集 5
五 集合的关系运算
集合之间可以比较包含关系:
1A = {1, 2, 3} 2B = {1, 2, 3, 4, 5} 3 4print(A < B) # True,A 是 B 的子集 5print(B > A) # True,B 是 A 的超集 6print(A == B) # False 7print(A != B) # True 8
六 集合推导式
Python 同样支持 集合推导式(set comprehension), 可以快速生成集合。
1squares = {x**2 for x in range(1, 6)} 2print(squares) # {1, 4, 9, 16, 25} 3
还可以加条件过滤:
1even_squares = {x**2 for x in range(1, 11) if x % 2 == 0} 2print(even_squares) # {4, 16, 36, 64, 100} 3
七 集合的去重功能
集合最常见的用途之一就是 去重。
1numbers = [1, 2, 2, 3, 3, 4] 2unique_numbers = list(set(numbers)) 3print(unique_numbers) # [1, 2, 3, 4] 4
⚠ 注意:集合是无序的,因此去重后的顺序可能与原列表不同。
八 集合的遍历
集合是可迭代的,可以直接用 for 遍历:
1fruits = {"apple", "banana", "cherry"} 2for fruit in fruits: 3 print(fruit) 4
由于集合无序,输出顺序可能每次都不一样。
九 集合的不可变版本:frozenset
在某些场景中,我们希望集合也能作为字典的键或放入另一个集合中。 这时可以使用 不可变集合(frozenset)。
1A = frozenset([1, 2, 3]) 2B = frozenset([3, 4, 5]) 3 4print(A | B) # {1, 2, 3, 4, 5} 5
frozenset 支持所有集合运算,但不支持修改(add、remove 等)。
十 实战案例:网站用户分析
假设我们要分析两个网站的访问用户重叠情况:
1site_A = {"Tom", "Lucy", "Jack", "Emma"} 2site_B = {"Lucy", "Emma", "John"} 3 4print("A站用户:", site_A) 5print("B站用户:", site_B) 6print("同时访问两站的用户:", site_A & site_B) 7print("只访问A站的用户:", site_A - site_B) 8print("所有用户:", site_A | site_B) 9
输出结果:
1同时访问两站的用户: {'Lucy', 'Emma'} 2只访问A站的用户: {'Jack', 'Tom'} 3所有用户: {'Jack', 'Lucy', 'Emma', 'Tom', 'John'} 4
十一 小结
| 特点 | 说明 |
|---|---|
| 是否有序 | ❌ 无序 |
| 是否可变 | ✅ 可变(frozenset 为不可变) |
| 是否允许重复 | ❌ 不允许 |
| 创建方式 | {} 或 set() |
| 主要功能 | 去重、集合运算、关系判断 |
| 常用操作 | add()、update()、remove()、union()、intersection() 等 |
| 推导式 | 支持集合推导式 |
✅ 总结
- 集合(set)是无序且不重复的容器。
- 常用于数据去重、过滤和集合关系计算。
- 支持数学集合的四大运算:并集、交集、差集、对称差集。
- 可以使用集合推导式快速生成集合。
- 如果需要不可变集合,可使用
frozenset。
《Python编程实战 · 基础入门篇 | 集合(set)》 是转载文章,点击查看原文。
