Python 集合操作
学习 set 的交集、并集、差集 · 难度:入门 · +10XP
Python 集合操作
集合(Set)是 Python 中一种无序、不重复的数据结构。它基于数学中集合的概念,提供了高效的成员检测和去重功能。集合使用花括号 {} 或 set() 构造函数创建。
集合的创建
# 使用花括号创建集合
fruits = {'apple', 'banana', 'orange', 'apple'} # 重复的 apple 会被自动去除
print(fruits) # {'apple', 'banana', 'orange'}
# 使用 set() 构造函数
numbers = set([1, 2, 3, 3, 4, 4, 5])
print(numbers) # {1, 2, 3, 4, 5}
# 创建空集合 (注意:不能使用 {},因为 {} 创建的是空字典)
empty_set = set()
print(type(empty_set)) # <class 'set'>
集合的基本操作
s = {1, 2, 3}
# 添加元素
s.add(4) # {1, 2, 3, 4}
# 添加多个元素
s.update([5, 6, 7]) # {1, 2, 3, 4, 5, 6, 7}
# 删除元素
s.remove(3) # 如果元素不存在会报错
s.discard(10) # 如果元素不存在不会报错
s.pop() # 随机删除并返回一个元素
# 清空集合
s.clear() # set()
集合的数学运算
集合支持数学中的交、并、差、对称差等运算:
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
# 并集 (Union)
print(a | b) # {1, 2, 3, 4, 5, 6, 7, 8}
print(a.union(b))
# 交集 (Intersection)
print(a & b) # {4, 5}
print(a.intersection(b))
# 差集 (Difference)
print(a - b) # {1, 2, 3}
print(a.difference(b))
# 对称差集 (Symmetric Difference)
print(a ^ b) # {1, 2, 3, 6, 7, 8}
print(a.symmetric_difference(b))
集合运算对照表
| 运算 | 运算符 | 方法 | 说明 |
|---|---|---|---|
| 并集 | | | union() | 返回所有不重复的元素 |
| 交集 | & | intersection() | 返回共同拥有的元素 |
| 差集 | - | difference() | 返回在 a 中但不在 b 中的元素 |
| 对称差 | ^ | symmetric_difference() | 返回在 a 或 b 中但不同时在两者中的元素 |
| 子集判断 | <= | issubset() | 判断是否所有元素都在另一个集合中 |
| 超集判断 | >= | issuperset() | 判断是否包含另一个集合的所有元素 |
实际应用场景
- 去重:快速去除列表中的重复元素
unique = list(set(my_list)) - 成员检测:检查元素是否存在,时间复杂度为 O(1)
- 共同好友:求两个用户好友列表的交集
- 数据筛选:快速找出两个数据集的差异