在 Python 数据处理中,集合(set)是一种无序、不重复的可变容器,专为 “元素唯一性判断” 与 “集合间关系计算” 设计。无论是去重、筛选共同元素,还是合并数据,集合运算都能提供高效简洁的解决方案。小编将梳理 Python 集合的 6 类核心运算,重点解析交集、并集的实现方法,助你快速掌握集合在实际开发中的应用。
一、集合的核心特性:为何适合运算?
在学习运算前,需先明确集合的两大关键特性,这是其高效运算的基础:
元素唯一性:集合自动去重,同一元素在集合中仅出现一次(如{1,2,2,3}会自动变为{1,2,3}),无需手动处理重复数据;
无序性:集合不记录元素插入顺序,也不支持索引访问(如set1[0]会报错),但底层采用哈希表实现,判断元素是否存在(in操作)的时间复杂度为 O (1),远快于列表的 O (n)。
正因为这些特性,集合在 “去重”“关系判断” 场景中效率显著,例如筛选两个列表的共同元素、合并多个数据集并去重等。
二、Python 集合的 6 类核心运算
Python 集合支持数学意义上的集合运算,包括交集、并集、差集、对称差集等,每种运算均提供 “运算符” 与 “内置方法” 两种实现方式,可根据代码可读性需求选择。
(一)交集:取两个集合的共同元素
定义:返回同时存在于两个集合中的所有元素,数学符号为 “∩”。
适用场景:筛选两个数据集的重叠部分,如 “找出同时购买 A 商品与 B 商品的用户 ID”。
实现方式:
运算符&:直接用set1 & set2计算交集,结果为新集合;
内置方法intersection():调用set1.intersection(set2),支持传入多个集合(如set1.intersection(set2, set3)取三个集合的共同元素)。
示例:
TypeScript取消自动换行复制
# 定义两个用户集合(存储用户ID)
users_a = {101, 102, 103, 104} # 购买A商品的用户
users_b = {103, 104, 105, 106} # 购买B商品的用户
# 方法1:用&运算符求交集
common_users1 = users_a & users_b
print(common_users1) # 输出:{103, 104}
# 方法2:用intersection()方法求交集
common_users2 = users_a.intersection(users_b)
print(common_users2) # 输出:{103, 104}
# 扩展:求三个集合的交集
users_c = {104, 105, 107}
common_three = users_a.intersection(users_b, users_c)
print(common_three) # 输出:{104}
(二)并集:合并两个集合并去重
定义:返回两个集合中所有不重复的元素,数学符号为 “∪”。
适用场景:合并多个数据集并自动去重,如 “汇总 A、B 两个渠道的用户 ID,避免重复统计”。
实现方式:
运算符|:用set1 | set2合并集合,自动去重;
内置方法union():调用set1.union(set2),同样支持传入多个集合。
示例:
TypeScript取消自动换行复制
# 定义两个渠道的用户集合
channel_x = {201, 202, 203}
channel_y = {203, 204, 205}
# 方法1:用|运算符求并集
total_users1 = channel_x | channel_y
print(total_users1) # 输出:{201, 202, 203, 204, 205}(自动去重203)
# 方法2:用union()方法求并集
total_users2 = channel_x.union(channel_y)
print(total_users2) # 输出:{201, 202, 203, 204, 205}
(三)其他常用集合运算
除交集、并集外,以下 4 类运算也高频使用:
差集:返回仅在第一个集合中存在的元素,用-运算符或difference()方法实现(如users_a - users_b,输出{101, 102});
对称差集:返回仅在其中一个集合中存在的元素(即 “并集减交集”),用^运算符或symmetric_difference()方法实现(如users_a ^ users_b,输出{101, 102, 105, 106});
子集判断:判断集合 A 是否完全包含于集合 B,用<=运算符或issubset()方法(如{103,104} <= users_a,输出True);
超集判断:判断集合 A 是否完全包含集合 B,用>=运算符或issuperset()方法(如users_a >= {103,104},输出True)。
三、集合运算的注意事项
数据类型限制:集合的元素必须是 “可哈希” 类型(如整数、字符串、元组),列表、字典等不可哈希类型不能作为集合元素(如{[1,2], 3}会报错);
运算结果为新集合:所有集合运算(如&、|、intersection())均返回新集合,不会修改原集合。若需直接修改原集合,可使用 “增强运算符” 或对应 “更新方法”,例如:
交集更新:set1 &= set2(等价于set1.intersection_update(set2)),直接修改set1为交集结果;
并集更新:set1 |= set2(等价于set1.update(set2)),直接将set2的元素合并到set1中并去重;
空集合的创建:不能用{}创建空集合({}表示空字典),需用set()创建(如empty_set = set())。
Python 集合运算以 “高效、简洁” 为核心优势,其中交集(&/intersection())与并集(|/union())是最常用的两种运算,分别适用于 “筛选共同元素” 与 “合并去重” 场景。实际开发中,需根据代码可读性选择实现方式(运算符更简洁,方法更直观),同时注意集合元素的可哈希性与空集合的创建方式。