21.1 集合是什么? #
集合是无序、元素唯一的可变容器。没有索引,不能按位置访问。
tags = {"python", "web", "api"}
# 重复元素会自动去重
print({1, 2, 2, 3}) # {1, 2, 3}元素须为不可变类型(数字、字符串、元组等);列表、字典不能放进集合。
21.2 创建集合 #
nums = {1, 2, 3}
empty = set() # 空集合必须用 set()
# {} 是空字典,不是集合
# 从列表去重(项目里很常见)
ids = [1, 2, 2, 3, 3]
unique_ids = list(set(ids))21.3 增删与查询 #
| 方法 | 作用 |
|---|---|
add(x) |
添加一个元素 |
update(iterable) |
批量添加 |
discard(x) |
删除元素,不存在也不报错 |
remove(x) |
删除元素,不存在抛 KeyError |
s = {"a", "b"}
s.add("c")
print("a" in s) # True,成员检测很快
s.discard("a") # 安全删除
print("a" in s) # True,成员检测很快
print(len(s))21.4 集合运算 #
用于标签交集、权限对比、数据去重对比等:
| 运算 | 写法 | 含义 |
|---|---|---|
| 并集 | a 或 b 或 a.union(b) |
所有元素 |
| 交集 | a & b 或 a.intersection(b) |
共有元素 |
| 差集 | a - b 或 a.difference(b) |
在 a 不在 b |
| 对称差 | a ^ b |
只在其中一个里 |
viewed = {"home", "cart", "pay"}
purchased = {"cart", "pay"}
# 并集
print("并集:", viewed | purchased)
print("并集 (union):", viewed.union(purchased))
# 交集
print("交集:", viewed & purchased)
print("交集 (intersection):", viewed.intersection(purchased))
# 差集
print("差集:", viewed - purchased)
print("差集 (difference):", viewed.difference(purchased))
# 对称差
print("对称差:", viewed ^ purchased)21.5 遍历 #
集合无序,for 遍历顺序不固定:
for tag in tags:
print(tag)21.6 列表 vs 集合:何时用 #
| 需求 | 用 |
|---|---|
| 有序、可重复、按索引 | 列表 |
去重、快速 in 判断 |
集合 |
| 并/交/差运算 | 集合 |
21.7 项目开发要点 #
- 去重:
list(set(items));若需保留顺序,用dict.fromkeys(items)等(后续可学) - 成员判断:大量 ID 是否已存在,用
set比list快 - 空集合:
set(),不要写{} - 不能放列表当元素:嵌套结构先去重键或转元组/
frozenset - 业务里常用:标签集合、权限集合、两批用户 ID 的交集/差集
- 需要顺序或重复:仍用列表,不要强行用集合