logo
15

集合(Sets)

⏱️ 25分钟

集合(Sets):去重、交并差运算的高效工具

你现在可能会困惑什么

“我用 list 也能去重,为什么还要 set?”

因为 set 在成员判断和去重上通常更高效, 并且天然支持并集、交集、差集等运算。

一句话定义

集合是无序且元素唯一的数据结构,适合去重与集合关系计算。

生活类比

两份同学名单找“共同同学”: 用 set 交集一行就能完成。

最小可运行例子

tags = {"python", "ai", "python"}
print(tags)  # {'python', 'ai'}

基础操作

s = {1, 2, 3}
s.add(4)
s.remove(2)
s.discard(99)  # 不报错
print(s)

集合运算

a = {1, 2, 3}
b = {3, 4, 5}

print(a | b)  # 并集
print(a & b)  # 交集
print(a - b)  # 差集
print(a ^ b)  # 对称差集

课堂小测(5 分钟)

  1. 给一组重复用户名去重。
  2. 计算两组用户的交集和差集。
  3. 判断某元素是否在集合中。

课堂小测参考答案与判分点

  • 参考答案方向:能写出可运行代码,并覆盖题目中的核心条件与边界输入。
  • 判分点 1(正确性):主流程结果正确,关键分支可执行。
  • 判分点 2(可读性):变量命名清晰,结构不过度嵌套。
  • 判分点 3(健壮性):对空值、类型错误或异常输入有基础保护。

迁移任务(课后)

实现“权限校验”小函数:

  • required_perms
  • user_perms
  • 输出缺失权限列表

本节验收标准

你能独立做到:

  • 使用 set 去重
  • 执行并交差等运算
  • 解释 set 与 list 的场景差异

常见报错与调试步骤(新手版)

  • 报错看不懂:先读最后一行错误类型(如 TypeErrorNameError),再回到对应代码行定位。
  • 不确定变量值:在关键位置临时 print(变量, type(变量)),先确认数据是否符合预期。
  • 改了代码却没生效:确认文件已保存、运行的是当前文件、终端环境(venv)是否正确。

常见误区

  • 误区:{} 是空集合。

  • 正解:{} 是空字典,空集合用 set()

  • 误区:set 能放任意元素。

  • 正解:元素必须可 hash(list/dict 不行)。