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 版本的迭代,集合的功能可能进一步扩展,但其基础原理和核心操作方法将持续稳定。希望本文能为编程学习者提供清晰的指导,并激发读者对数据结构与算法的深入探索。

最新发布