5. 集合
集合是无序、不重复的容器,底层使用哈希存储,成员运算速度极快。使用 {} 或 set() 创建。
⚠️ 空集合
{} 创建的是空字典,不是空集合!空集合必须用 set()。
python
# 创建集合(自动去重)
s1 = {1, 2, 3, 3, 2} # {1, 2, 3}
s2 = set('hello') # {'h', 'e', 'l', 'o'}(去重)
s3 = set([1, 2, 2, 3]) # {1, 2, 3}
# 集合元素必须是不可变类型(hashable)
# s = {[1, 2]} # TypeError! 列表不能作为集合元素
集合运算
| 运算 | 运算符 | 方法 | 说明 |
|---|---|---|---|
| 交集 | & | intersection() | 两个集合共有的元素 |
| 并集 | | | union() | 两个集合所有元素(去重) |
| 差集 | - | difference() | 只在第一个集合中的元素 |
| 对称差 | ^ | symmetric_difference() | 不同时属于两个集合的元素 |
| 子集 | <= | issubset() | A 是否为 B 的子集 |
| 超集 | >= | issuperset() | A 是否为 B 的超集 |
python
set1 = {1, 2, 3, 4, 5, 6, 7}
set2 = {2, 4, 6, 8, 10}
print(set1 & set2) # {2, 4, 6} 交集
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8, 10} 并集
print(set1 - set2) # {1, 3, 5, 7} 差集
print(set1 ^ set2) # {1, 3, 5, 7, 8, 10} 对称差
# 添加和删除
set1.add(100)
set1.discard(1) # 不存在不报错
# set1.remove(1) # 不存在会报错 KeyError
▶ 运行结果:
输出
{2, 4, 6}
{1, 2, 3, 4, 5, 6, 7, 8, 10}
{1, 3, 5, 7}
{1, 3, 5, 7, 8, 10}
💡 集合的核心用途
去重:list(set(lst)) 一行去重。
成员判断:x in set 比 x in list 快得多(O(1) vs O(n))。