Python中集合运算全面详解与实例演示

 更新时间:2026年07月03日 09:03:48   作者:老师好,我是刘同学  
Python集合运算提供了强大而灵活的数据处理能力,通过四种基本运算(交集、并集、差集、对称差集)及其对应的运算符和方法,可以高效解决各种数据处理问题,下面小编就和大家详细讲讲吧

一、集合基础概念回顾

Python中的集合(set)是一个无序、不重复元素的集合数据类型,主要用于进行成员关系测试和消除重复元素。集合分为可变集合(set)和不可变集合(frozenset)两种类型 。

集合的创建方式

# 使用大括号创建集合
set1 = {1, 2, 3, 4, 5}
set2 = {'apple', 'banana', 'cherry'}

# 使用set()函数创建集合
set3 = set([1, 2, 3, 2, 1])  # 自动去重,结果为{1, 2, 3}
set4 = set("hello")  # 结果为{'h', 'e', 'l', 'o'}

二、集合的基本运算方法

Python集合支持四种主要的数学运算:交集、并集、差集和对称差集,每种运算都有对应的运算符和方法两种实现方式 。

2.1 交集运算

交集返回两个集合中都包含的元素。

运算方式运算符方法描述
交集运算&intersection()返回两个集合的共同元素
# 交集运算示例
set_a = {1, 2, 3, 4, 5}
set_b = {4, 5, 6, 7, 8}

# 使用运算符
intersection_operator = set_a & set_b  # 结果为{4, 5}

# 使用方法
intersection_method = set_a.intersection(set_b)  # 结果为{4, 5}

print(f"集合A: {set_a}")
print(f"集合B: {set_b}")
print(f"交集(运算符): {intersection_operator}")
print(f"交集(方法): {intersection_method}")

应用场景:找出两个用户群的共同好友、筛选同时满足多个条件的商品等 。

2.2 并集运算

并集返回两个集合中所有的唯一元素。

运算方式运算符方法描述
并集运算|union()返回两个集合的所有唯一元素
# 并集运算示例
set_x = {1, 2, 3}
set_y = {3, 4, 5}

# 使用运算符
union_operator = set_x | set_y  # 结果为{1, 2, 3, 4, 5}

# 使用方法
union_method = set_x.union(set_y)  # 结果为{1, 2, 3, 4, 5}

print(f"集合X: {set_x}")
print(f"集合Y: {set_y}")
print(f"并集(运算符): {union_operator}")
print(f"并集(方法): {union_method}")

应用场景:合并多个数据源、统计所有参与活动的用户等 。

2.3 差集运算

差集返回存在于第一个集合但不在第二个集合中的元素。

运算方式运算符方法描述
差集运算-difference()返回第一个集合有而第二个集合没有的元素
# 差集运算示例
set_p = {1, 2, 3, 4, 5}
set_q = {4, 5, 6}

# 使用运算符
difference_operator = set_p - set_q  # 结果为{1, 2, 3}

# 使用方法
difference_method = set_p.difference(set_q)  # 结果为{1, 2, 3}

print(f"集合P: {set_p}")
print(f"集合Q: {set_q}")
print(f"差集P-Q(运算符): {difference_operator}")
print(f"差集P-Q(方法): {difference_method}")

应用场景:找出新用户、筛选未完成的任务、检测数据变化等 。

2.4 对称差集运算

对称差集返回两个集合中不重复的元素,即只存在于其中一个集合中的元素。

运算方式运算符方法描述
对称差集^symmetric_difference()返回两个集合中非共同的元素
# 对称差集运算示例
set_m = {1, 2, 3, 4}
set_n = {3, 4, 5, 6}

# 使用运算符
symmetric_operator = set_m ^ set_n  # 结果为{1, 2, 5, 6}

# 使用方法
symmetric_method = set_m.symmetric_difference(set_n)  # 结果为{1, 2, 5, 6}

print(f"集合M: {set_m}")
print(f"集合N: {set_n}")
print(f"对称差集(运算符): {symmetric_operator}")
print(f"对称差集(方法): {symmetric_method}")

三、集合运算的扩展应用

3.1 多重集合运算

集合运算支持多个集合同时操作,这在处理复杂数据关系时非常有用 。

# 多重集合运算示例
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
set3 = {4, 5, 6, 7}

# 多个集合的交集
multi_intersection = set1 & set2 & set3  # 结果为{4}

# 多个集合的并集
multi_union = set1 | set2 | set3  # 结果为{1, 2, 3, 4, 5, 6, 7}

# 链式方法调用
chain_intersection = set1.intersection(set2).intersection(set3)
chain_union = set1.union(set2).union(set3)

print(f"三个集合的交集: {multi_intersection}")
print(f"三个集合的并集: {multi_union}")

3.2 集合的比较运算

Python集合还支持多种比较运算,用于判断集合之间的关系 。

# 集合比较运算示例
set_alpha = {1, 2, 3}
set_beta = {1, 2, 3, 4, 5}
set_gamma = {1, 2, 3}

# 子集判断
is_subset = set_alpha <= set_beta  # True
is_proper_subset = set_alpha < set_beta  # True

# 超集判断
is_superset = set_beta >= set_alpha  # True
is_proper_superset = set_beta > set_alpha  # True

# 相等判断
is_equal = set_alpha == set_gamma  # True

# 不相交判断
set_delta = {6, 7, 8}
is_disjoint = set_alpha.isdisjoint(set_delta)  # True

print(f"set_alpha是set_beta的子集: {is_subset}")
print(f"set_alpha是set_beta的真子集: {is_proper_subset}")
print(f"set_beta是set_alpha的超集: {is_superset}")
print(f"set_alpha与set_gamma相等: {is_equal}")
print(f"set_alpha与set_delta不相交: {is_disjoint}")

四、实际应用场景案例

4.1 数据分析应用

# 电商平台用户行为分析
all_users = {'user1', 'user2', 'user3', 'user4', 'user5'}
purchased_users = {'user1', 'user3', 'user5'}
browsed_users = {'user2', 'user3', 'user4'}

# 找出购买但未浏览的用户
purchased_not_browsed = purchased_users - browsed_users  # {'user1', 'user5'}

# 找出浏览但未购买的用户
browsed_not_purchased = browsed_users - purchased_users  # {'user2', 'user4'}

# 找出既浏览又购买的用户
both_actions = purchased_users & browsed_users  # {'user3'}

# 找出有任一行为的用户
any_action = purchased_users | browsed_users  # {'user1', 'user2', 'user3', 'user4', 'user5'}

# 找出只进行一种行为的用户
only_one_action = purchased_users ^ browsed_users  # {'user1', 'user2', 'user4', 'user5'}

print(f"购买但未浏览的用户: {purchased_not_browsed}")
print(f"浏览但未购买的用户: {browsed_not_purchased}")
print(f"既浏览又购买的用户: {both_actions}")
print(f"有任一行为的用户: {any_action}")
print(f"只进行一种行为的用户: {only_one_action}")

4.2 数据清洗与处理

# 数据去重与更新处理
current_data = {'A', 'B', 'C', 'D', 'E'}
new_data = {'C', 'D', 'E', 'F', 'G'}

# 需要删除的数据(在当前但不在新的)
to_delete = current_data - new_data  # {'A', 'B'}

# 需要添加的数据(在新的但不在当前)
to_add = new_data - current_data  # {'F', 'G'}

# 保持不变的数据
unchanged = current_data & new_data  # {'C', 'D', 'E'}

print(f"需要删除的数据: {to_delete}")
print(f"需要添加的数据: {to_add}")
print(f"保持不变的数据: {unchanged}")

4.3 权限管理系统

# 用户权限管理
admin_permissions = {'create', 'read', 'update', 'delete'}
editor_permissions = {'create', 'read', 'update'}
viewer_permissions = {'read'}

# 权限升级计算
upgrade_to_editor = editor_permissions - viewer_permissions  # {'create', 'update'}
upgrade_to_admin = admin_permissions - editor_permissions  # {'delete'}

# 权限交集验证
common_permissions = admin_permissions & editor_permissions & viewer_permissions  # {'read'}

print(f"从查看者升级到编辑者需要添加的权限: {upgrade_to_editor}")
print(f"从编辑者升级到管理员需要添加的权限: {upgrade_to_admin}")
print(f"所有角色共有的权限: {common_permissions}")

五、性能优化技巧

5.1 使用集合进行快速成员检测

# 列表与集合成员检测性能对比
large_list = list(range(1000000))
large_set = set(range(1000000))

import time

# 列表成员检测
start_time = time.time()
result1 = 999999 in large_list
list_time = time.time() - start_time

# 集合成员检测
start_time = time.time()
result2 = 999999 in large_set
set_time = time.time() - start_time

print(f"列表成员检测时间: {list_time:.6f}秒")
print(f"集合成员检测时间: {set_time:.6f}秒")
print(f"性能提升: {list_time/set_time:.1f}倍")

5.2 使用列表推导式实现集合运算

在某些场景下,可以使用列表推导式实现简单的集合运算 。

# 使用列表推导式实现集合运算
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]

# 使用列表推导式求交集
intersection_list = [x for x in list1 if x in list2]  # [4, 5]

# 转换为集合去重
intersection_set = set(intersection_list)

print(f"列表推导式交集: {intersection_list}")
print(f"转换为集合: {intersection_set}")

六、总结

Python集合运算提供了强大而灵活的数据处理能力,通过四种基本运算(交集、并集、差集、对称差集)及其对应的运算符和方法,可以高效解决各种数据处理问题 。在实际应用中,集合运算特别适合于数据去重、关系分析、权限管理和性能优化等场景 。

关键优势

  • 高效性:集合基于哈希表实现,查找操作时间复杂度为O(1)
  • 简洁性:运算符和方法提供了直观的表达方式
  • 灵活性:支持多重集合运算和链式调用
  • 实用性:广泛应用于数据分析、系统开发和算法实现

通过掌握这些集合运算技巧,可以显著提升Python编程的效率和质量,特别是在处理复杂数据关系时能够提供清晰简洁的解决方案 。

到此这篇关于Python中集合运算全面详解与实例演示的文章就介绍到这了,更多相关Python集合运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 学python需要去培训机构吗

    学python需要去培训机构吗

    在本篇文章里小编给大家整理的是关于学python是否需要去培训机构的相关内容,有需要的朋友们可以阅读下。
    2020-07-07
  • Python 流程控制实例代码

    Python 流程控制实例代码

    Python是一门简单的语言。对于一个问题,应该只有一个解决方法。在Python中,有三种流程控制方法:if-else、while和for。
    2009-09-09
  • pandas中提取DataFrame某些列的一些方法

    pandas中提取DataFrame某些列的一些方法

    dataframe是pandas包的重要对象,熟练掌握dataframe的基本操作是很有必要的,下面这篇文章主要给大家介绍了关于pandas中提取DataFrame某些列的一些方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 浅谈对Python变量的一些认识理解

    浅谈对Python变量的一些认识理解

    变量(variable)是编程的基础概念,Python 的变量看似简单,深入了解却不易.文中有非常详细的介绍及代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • python去除字符strip方法的实现

    python去除字符strip方法的实现

    Python中strip()方法用于去除字符串首尾的空白字符,包括空格、制表符和换行符,可以确保字符串没有多余的空白字符,感兴趣的可以了解一下
    2024-11-11
  • python类参数定义及数据扩展方式unsqueeze/expand

    python类参数定义及数据扩展方式unsqueeze/expand

    本文主要介绍了python类参数定义及数据扩展方式unsqueeze/expand,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • django主动抛出403异常的方法详解

    django主动抛出403异常的方法详解

    这篇文章主要给大家介绍了关于django主动抛出403异常的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 浅析Python中生成器和迭代器的神奇力量

    浅析Python中生成器和迭代器的神奇力量

    在Python中,生成器和迭代器是实现惰性计算的两种重要工具,它们可以帮助我们更有效地处理数据接下来,小编就来为大家详细介绍这两种工具吧
    2023-07-07
  • python分析网页上所有超链接的方法

    python分析网页上所有超链接的方法

    这篇文章主要介绍了python分析网页上所有超链接的方法,涉及Python使用urllib模块操作页面超链接的技巧,需要的朋友可以参考下
    2015-05-05
  • Python如何在Word中生成多种不同类型的图表

    Python如何在Word中生成多种不同类型的图表

    Word 文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用 Python 在 Word 文档中创建和自定义各种图表,需要的可以参考下
    2025-03-03

最新评论