Python3 集合(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在 Python 编程语言中,集合(Set)是一种高效且功能强大的数据结构,它在数据去重、快速成员检测以及集合运算等场景中展现出独特的优势。对于编程初学者而言,理解集合的特性与操作方法,能够显著提升代码的简洁性与执行效率;而对于中级开发者,掌握集合的高级技巧和应用场景,则有助于解决更复杂的逻辑问题。本文将通过循序渐进的方式,结合实际案例和代码示例,深入解析 Python3 集合 的核心知识点,并帮助读者建立清晰的应用思维。
一、集合的基础概念与特点
1.1 定义与核心特性
集合是 Python 中一种无序、不重复的元素容器。它通过数学中的集合论原理实现,支持快速的成员查询、交集、并集等运算。集合的两个核心特性如下:
- 无序性:集合中的元素没有固定顺序,每次输出时可能呈现不同的排列。
- 唯一性:集合内的元素不可重复,添加重复元素时会被自动忽略。
形象比喻:可以将集合想象为一个购物车,你只能存放不同种类的商品,且无法指定商品的摆放位置。
1.2 创建集合的三种方式
方式一:使用大括号 {}
fruits = {"apple", "banana", "orange"}
print(type(fruits)) # 输出: <class 'set'>
方式二:通过 set()
构造函数
numbers = set([1, 2, 3, 3, 4]) # 自动去重
print(numbers) # 输出:{1, 2, 3, 4}
方式三:空集合的创建
empty_set = set()
print(type(empty_set)) # 输出:<class 'set'>
二、集合的基本操作与方法
2.1 元素的增删改查
2.1.1 添加元素:add()
和 update()
-
add()
方法用于添加单个元素:my_set = {1, 2} my_set.add(3) print(my_set) # 输出:{1, 2, 3}
-
update()
方法用于添加多个元素(需传入可迭代对象):my_set.update([4, 5], {6, 7}) print(my_set) # 输出:{1, 2, 3, 4, 5, 6, 7}
2.1.2 删除元素:remove()
、discard()
和 pop()
-
remove(element)
:删除指定元素,若元素不存在则抛出错误:my_set.remove(7)
-
discard(element)
:删除指定元素,若元素不存在则无动作:my_set.discard(8) # 不会报错
-
pop()
:随机删除并返回一个元素(因集合无序,无法预测具体删除哪个):removed_element = my_set.pop()
2.1.3 查询元素存在性
if "apple" in fruits:
print("苹果在集合中")
2.2 集合的数学运算
集合支持多种数学运算,这些操作在数据处理和逻辑判断中非常实用。
2.2.1 并集(Union):union()
或 |
set_a = {1, 2, 3}
set_b = {3, 4, 5}
union_result = set_a | set_b # 或者 set_a.union(set_b)
print(union_result) # 输出:{1, 2, 3, 4, 5}
2.2.2 交集(Intersection):intersection()
或 &
intersection_result = set_a & set_b # 或者 set_a.intersection(set_b)
print(intersection_result) # 输出:{3}
2.2.3 差集(Difference):difference()
或 -
difference_a_b = set_a - set_b # 或者 set_a.difference(set_b)
print(difference_a_b) # 输出:{1, 2}
2.2.4 对称差集(Symmetric Difference):symmetric_difference()
或 ^
sym_diff = set_a ^ set_b # 或者 set_a.symmetric_difference(set_b)
print(sym_diff) # 输出:{1, 2, 4, 5}
三、集合的高级用法与最佳实践
3.1 不可变集合(Frozen Set)
若需要创建一个不可变的集合(常用于字典的键或集合元素),可以使用 frozenset()
:
immutable_set = frozenset({1, 2, 3})
3.2 集合推导式(Set Comprehension)
通过推导式快速生成集合:
squares = {x**2 for x in range(1, 11)}
print(squares) # 输出:{1, 4, 9, 16, 25, 36, 49, 64, 81, 100}
3.3 集合与其他数据结构的对比
数据结构 | 特点 | 典型用途 |
---|---|---|
列表(List) | 有序、可重复 | 需要维护元素顺序或允许重复时使用 |
集合(Set) | 无序、不可重复 | 需要快速成员检测或去重时使用 |
字典(Dict) | 键值对存储 | 需要通过键快速访问值时使用 |
四、实际案例:集合在数据处理中的应用
4.1 案例一:去除列表中的重复元素
duplicated_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(duplicated_list))
print(unique_list) # 输出示例:[1, 2, 3, 4, 5]
4.2 案例二:统计文本中的唯一单词
text = "hello world hello python world"
words = text.split() # 分割为单词列表
unique_words = set(words)
print(f"唯一单词数量:{len(unique_words)}") # 输出:3
4.3 案例三:计算两个数据集的差异
user_a = {"news", "sports", "tech"}
user_b = {"sports", "music", "tech"}
unique_to_a = user_a - user_b
print(unique_to_a) # 输出:{"news"}
五、常见问题与注意事项
5.1 为什么集合不支持索引?
由于集合是无序的,无法通过索引(如 my_set[0]
)访问元素。若需要有序且唯一的集合,可以考虑使用 collections
模块中的 OrderedSet
(需第三方库)。
5.2 集合与字典的区别
字典的键(Key)本质上是一个不可重复且无序的集合,因此集合常被用于字典键的快速验证:
def is_valid_key(key):
return key in {"id", "name", "email"} # 使用集合进行快速判断
5.3 性能优化建议
- 成员检测:集合的成员检测时间复杂度为 O(1),远快于列表的 O(n)。
- 避免频繁修改大集合:若需频繁增删元素,集合仍优于列表,但需注意内存占用。
结论
通过本文的讲解,读者应已掌握 Python3 集合 的核心概念、操作方法及实际应用场景。集合不仅简化了数据去重和集合运算的复杂度,还为开发者提供了高效解决问题的工具。无论是处理文本中的唯一单词,还是分析用户行为数据的差异,集合都能展现出其独特的优势。建议读者在实际项目中多加实践,结合具体需求选择合适的数据结构,从而提升代码的可读性和执行效率。
未来,随着 Python 版本的迭代,集合的功能可能进一步扩展,但其基础原理和核心操作方法将持续稳定。希望本文能为编程学习者提供清晰的指导,并激发读者对数据结构与算法的深入探索。