Python集合操作实战_交并差与去重方案解析【教学】

Python集合基于哈希表,支持O(1)交集(&/intersection)、并集(|/union)、差集(-/difference)、对称差集(^/symmetric_difference)及去重操作,但元素须可哈希且不保持顺序。

Python集合(set)是处理无序、唯一元素的利器,尤其适合做交集、并集、差集和去重操作。它底层基于哈希表,查找和运算平均时间复杂度为 O(1),比用列表手动遍历高效得多。

交集:找共同元素

& 符号或 .intersection() 方法获取两个或多个集合共有的元素。注意:结果仍是 set 类型,若需列表可转成 list。

  • 推荐写法: common = set_a & set_b & set_c
  • 兼容动态多个集合: common = set_a.intersection(set_b, set_c, set_d)
  • 小提示: 若其中一个集合为空,结果就是空集;不支持对列表直接运算,需先转 set

并集:合并所有不重复元素

|.union() 把多个集合“拼起来”,自动去重。常用于汇总不同来源的数据标签、用户ID等。

  • 简洁写法: all_items = set_a | set_b
  • 支持任意数量: total = set_a.union(set_b, set_c, *list_of_sets)
  • 注意: union 返回新集合,原集合不变;传入非 set 类型(如 list)会自动转换,但建议提前确认数据类型

差集:找出“独有”的部分

-.difference() 得到在第一个集合中存在、但不在后续集合中出现的元素。典型场景如:找出新用户里未注册老系统的人、筛选出尚未处理的任务ID。

  • 基础用法: only_in_a = set_a - set_b
  • 链式差集: unique_to_a = set_a - set_b - set_c 等价于 set_a.difference(set_b, set_c)
  • 对称差集(异或):^.symmetric_difference() 获取只在一个集合中出现的元素(即并集减去交集)

去重:不止适用于列表

把任意可迭代对象转为 set 是最常用的去重方式,但要注意:原始顺序会丢失,且元素必须是可哈希的(如不能含字典或列表)。

  • 基础去重: unique_list = list(set(original_list))
  • 保持顺序的去重(Python 3.7+): list(dict.fromkeys(original_list))
  • 处理嵌套结构? 先序列化(如用 json.dumps)再转 set,或自定义哈希逻辑;简单场景可改用 frozenset 包裹不可变子项