共计 1171 个字符,预计需要花费 3 分钟才能阅读完成。
集合(set)是 Python 内置的无序、元素不可重复的数据结构,常用于数据去重与高效的成员检测(平均 O(1))。集合的元素必须可哈希(如数字、字符串、元组),而列表、字典等不可直接作为元素。
一、创建集合与去重
# 花括号或 set() 创建
s1 = {1, 2, 3, 3, 2}
print(s1) # {1, 2, 3} 自动去重
# 从可迭代对象创建(常用于列表去重)lst = [1, 2, 2, 3, 4, 4]
s2 = set(lst) # {1, 2, 3, 4}
unique_lst = list(s2) # 再转回列表(顺序会丢失)
如果需要“去重且保序”,可配合字典键或 OrderedDict 实现。
二、增删查改(集合为可变类型)
s = {1, 2}
s.add(3) # 添加单个元素 -> {1, 2, 3}
s.update([3, 4, 5]) # 批量添加 -> {1, 2, 3, 4, 5}
s.remove(5) # 删除存在的元素;不存在会报错 KeyError
s.discard(99) # 删除不存在也不会报错
x = s.pop() # 随机删除并返回一个元素(集合无序)s.clear() # 清空
三、常用集合运算(并、交、差、对称差)
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b) # 并集 -> {1, 2, 3, 4, 5}
print(a & b) # 交集 -> {3}
print(a - b) # 差集 -> {1, 2}
print(a ^ b) # 对称差集 -> {1, 2, 4, 5}
这些运算也有对应方法:a.union(b), a.intersection(b), a.difference(b), a.symmetric_difference(b)。
四、关系判断
x = {1, 2}
y = {1, 2, 3}
z = {4, 5}
print(x.issubset(y)) # True 子集
print(y.issuperset(x)) # True 超集
print(x.isdisjoint(z)) # True 不相交
五、成员测试与遍历
s = {10, 20, 30}
print(20 in s) # True,平均 O(1) 查找
for v in s:
print(v) # 无序遍历
六、集合推导式
# 生成平方集合(自动去重)squares = {n*n for n in [1, 2, 2, 3, 3, 4]}
print(squares) # {16, 1, 4, 9}
七、不可变集合:frozenset
fs = frozenset([1, 2, 3])
# fs.add(4) # 不可变,无法添加 / 删除
# 但可作为字典键或另一个集合的元素
d = {fs: "immutable key"}
八、典型应用场景
1)快速去重:从日志或 CSV 读入后用 set 去重;
2)高效查找:用集合保存“黑名单 / 白名单”进行成员判断;
3)集合运算:计算共同好友(交集)、推荐差异(对称差集)。
小结:集合提供了简洁高效的去重与集合运算能力;在需要快速成员测试、集合逻辑运算的场景下,应优先考虑使用 set 或frozenset。
正文完