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 setx in list 快得多(O(1) vs O(n))。