▪ 集合核心特性
- 无序性:元素存储顺序与添加顺序无关
- 元素唯一性:自动过滤重复元素
- 可变性:支持增删操作(frozenset为不可变版本)
- 哈希约束:元素必须是可哈希对象(不可包含列表等可变类型)
▪ 集合创建方式
# 空集合(必须使用set())
empty_set = set()
# 字面量创建
numbers = {1, 2, 3, 5, 7}
# 从可迭代对象转换
chars = set('hello') # {'h', 'e', 'l', 'o'}
# 集合推导式
squares = {x**2 for x in range(10)}
# 不可变集合
frozen = frozenset([1, 2, 3])
▪ 元素管理方法
方法 | 说明 | 示例 |
add(e) | 添加单个元素 | s.add(4) |
update(it) | 合并可迭代对象 | s.update([5,6,7]) |
remove(e) | 移除指定元素(不存在时报错) | s.remove(3) |
discard(e) | 安全移除元素 | s.discard(10) |
pop() | 随机移除并返回元素 | val = s.pop() |
clear() | 清空集合 | s.clear() |
▪ 集合运算详解
a = {1,2,3}
b = {3,4,5}
# 并集(包含所有元素)
a | b # {1,2,3,4,5}
a.union(b)
# 交集(共同元素)
a & b # {3}
a.intersection(b)
# 差集(a有b无)
a - b # {1,2}
a.difference(b)
# 对称差集(仅出现一次)
a ^ b # {1,2,4,5}
a.symmetric_difference(b)
▪ 高级集合操作
# 集合比较
{1,2} <= {1,2,3} # True (子集检查)
a.issubset(b)
{1,2,3} >= {2,3} # True (超集检查)
a.issuperset(b)
# 无交集验证
a.isdisjoint({7,8}) # True
# 修改原集合的操作
a.intersection_update(b) # a变为两者的交集
a.difference_update(b) # 移除a中属于b的元素
▪ 性能特征对比
操作 | 时间复杂度 | 对比列表 |
元素存在性检查 | O(1) | 列表为O(n) |
添加元素 | O(1) | 列表append为O(1) |
删除元素 | O(1) | 列表remove为O(n) |
集合运算 | O(len(s)) | 列表需嵌套循环 |
▪ 典型应用场景
✓ 快速去重:list(set(duplicate_list))
✓ 关系测试:检查共同好友、共同兴趣等
✓ 数据筛选:使用集合运算过滤数据
✓ 状态跟踪:记录已处理过的元素