本文目录导读:

我来给你详细讲解Python集合并集的几种案例,从基础到进阶:
基础并集操作
使用 union() 方法
# 创建两个集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# 使用 union() 方法
result = set1.union(set2)
print(result) # {1, 2, 3, 4, 5, 6, 7, 8}
使用 运算符
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# 使用 | 运算符
result = set1 | set2
print(result) # {1, 2, 3, 4, 5, 6, 7, 8}
多个集合的并集
# 三个或更多集合的并集
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = {5, 6, 7}
# 方法1:链式调用
result1 = set1.union(set2, set3)
print(result1) # {1, 2, 3, 4, 5, 6, 7}
# 方法2:连续使用运算符
result2 = set1 | set2 | set3
print(result2) # {1, 2, 3, 4, 5, 6, 7}
实际应用案例
案例1:用户权限合并
# 不同用户组的权限
admin_permissions = {'read', 'write', 'delete', 'admin'}
user_permissions = {'read', 'write', 'upload'}
guest_permissions = {'read'}
# 合并所有权限
all_permissions = admin_permissions | user_permissions | guest_permissions
print(f"所有权限: {all_permissions}")
# 输出: 所有权限: {'read', 'write', 'delete', 'admin', 'upload'}
案例2:合并多个数据源
# 从不同来源收集的客户ID
source1_customers = {101, 102, 103, 104}
source2_customers = {103, 104, 105, 106}
source3_customers = {106, 107, 108}
# 合并所有客户(去重)
all_customers = set()
all_customers = all_customers.union(source1_customers, source2_customers, source3_customers)
print(f"所有客户ID: {sorted(all_customers)}")
# 输出: 所有客户ID: [101, 102, 103, 104, 105, 106, 107, 108]
案例3:标签系统合并
# 文章标签合并
article1_tags = {'python', '编程', '入门'}
article2_tags = {'python', '进阶', '面向对象'}
article3_tags = {'java', '编程', '入门'}
# 合并所有标签
all_tags = article1_tags | article2_tags | article3_tags
print(f"所有标签: {all_tags}")
# 输出: 所有标签: {'python', '编程', '入门', '进阶', '面向对象', 'java'}
与其他数据结构结合使用
# 列表转集合并合并
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
list3 = [7, 8, 9, 10]
# 先转集合再合并
result = set(list1) | set(list2) | set(list3)
print(f"合并后的集合: {sorted(result)}")
# 输出: 合并后的集合: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
性能对比
import time
# 大数据集合并集
big_set1 = set(range(1000000))
big_set2 = set(range(500000, 1500000))
# 测试 union() 性能
start = time.time()
result1 = big_set1.union(big_set2)
print(f"union() 耗时: {time.time() - start:.4f}秒")
# 测试 | 运算符性能
start = time.time()
result2 = big_set1 | big_set2
print(f"| 运算符耗时: {time.time() - start:.4f}秒")
# 两种方式性能相似,| 运算符更简洁
常见错误和注意事项
# ❌ 错误:混合数据类型可能导致类型错误
set1 = {1, 2, 3}
list1 = [4, 5, 6]
# result = set1 | list1 # 这行会报错!
# ✅ 正确:先转换类型
result = set1 | set(list1)
print(f"正确的结果: {result}") # {1, 2, 3, 4, 5, 6}
# ✅ 使用 union() 接受可迭代对象
result = set1.union(list1)
print(f"使用 union() 的结果: {result}") # {1, 2, 3, 4, 5, 6}
实用技巧
# 合并多个集合到空集合
sets = [{1, 2}, {3, 4}, {5, 6}, {2, 7}]
result = set().union(*sets) # 使用参数解包
print(f"多集合合并: {sorted(result)}") # [1, 2, 3, 4, 5, 6, 7]
# 条件合并
def conditional_union(sets, condition):
"""条件合并:只合并满足条件的集合"""
result = set()
for s in sets:
if condition(s):
result = result | s
return result
# 只合并大小大于2的集合
sets = [{1, 2}, {3, 4, 5}, {6}, {7, 8, 9}]
result = conditional_union(sets, lambda x: len(x) > 2)
print(f"条件合并结果: {sorted(result)}") # [3, 4, 5, 7, 8, 9]
| 方法 | 语法 | 特点 |
|---|---|---|
union() |
set1.union(set2) |
可接受多个参数,更灵活 |
| 运算符 | set1 \| set2 |
语法简洁,性能相当 |
| 多集合合并 | set().union(*sets) |
适合动态数量的集合 |
并集操作非常适合数据去重、权限合并、标签聚合等场景,建议根据具体需求选择合适的实现方式。