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。
立即学习“Python免费学习笔记(深入)”;
-
基础用法:
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 包裹不可变子项










