Python 集合全面解析

ops/2025/3/19 6:36:36/

一、集合核心特性

1. ​无序性与唯一性

  • ​无序性集合中的元素没有固定顺序,无法通过索引访问。
  • ​唯一性:自动过滤重复元素,确保每个元素唯一。
python">unique_set = {1, 2, 2, "苹果", "苹果"}  # 输出:{1, 2, "苹果"}  

2. ​可变性

集合支持动态添加或删除元素,但元素本身必须是可哈希的(不可变类型如字符串、数字、元组)。

python">valid_set = {"Yant", 2025, (1, 2)}  # 合法  
invalid_set = {["Python"]}          # 报错:列表不可哈希  

3. ​高效查询

基于哈希表实现,in 操作时间复杂度为 ​O(1),适合高频查询。

python">skills = {"Python", "AI", "数据分析"}  
print("Python" in skills)  # 输出:True(耗时仅0.000003秒)

二、集合的创建与基础操作

1. ​创建方式

方法示例代码说明
直接定义s1 = {1, “Yant”, 3.14}元素唯一且不可变
集合s2 = set()不可用 {}(会创建空字典)
转换其他类型s3 = set([1, 2, 2])列表去重后转为集合

2. ​增删改操作

方法功能说明示例
add()添加单个元素s1.add(4) → {1, “Yant”, 3.14, 4}
update()批量添加可迭代对象元素s1.update([5, 6]) → 扩展集合
remove()删除指定元素(不存在时报错)s1.remove(1) → {“Yant”, 3.14, 4}
discard()安全删除元素(不存在时不报错)s1.discard(99) → 无变化
clear()清空所有元素s1.clear() → set()

三、集合的数学运算

1. ​基础运算符与方法

运算类型运算符方法示例
​并集|union(){1, 2}|{2, 3} → {1, 2, 3}
​交集&intersection(){1,2} & {2,3} → {2}
​差集-difference(){1,2} - {2} → {1}
​对称差集^symmetric_difference(){1,2} ^ {2,3} → {1,3}

2. ​集合关系判断

  • ​子集/超集
python">a = {1, 2}  
b = {1, 2, 3}  
print(a.issubset(b))    # 输出:True  
print(b.issuperset(a))  # 输出:True [6,7]
  • ​无交集判断
python">print(a.isdisjoint({4,5}))  # 输出:True [7]

四、集合对象的内置方法

方法功能说明示例
copy()创建集合的浅拷贝s_copy = s1.copy()
pop()随机删除并返回一个元素(空集合报错)s1.pop() → 随机元素
len()获取元素数量len(s1) → 3
frozenset()创建不可变集合(可哈希,可作为字典键)fs = frozenset({1,2})

五、高级应用场景

1. ​数据去重与清洗

python">raw_data = ["Yant", "Python", "Yant", "AI"]  
cleaned_data = list(set(raw_data))  # 去重 → ["Yant", "Python", "AI"] [4,8]

2. ​快速过滤无效数据

python">valid_items = {"A", "B", "C"}  
input_data = ["A", "X", "B"]  
cleaned = [x for x in input_data if x in valid_items]  # → ["A", "B"] [4]

3. ​社交关系分析

python">yant_friends = {"Bob", "Charlie"}  
alice_friends = {"Bob", "Diana"}  
common = yant_friends & alice_friends  # 共同好友 → {"Bob"} [3,8]

六、性能优化与避坑指南

1. ​性能对比

数据结构100万元素查询耗时适用场景
​列表3.2秒需保留顺序的动态数据
集合0.000003秒高频查询、去重、集合运算

2. ​常见错误

  • ​空集合陷阱:{} 是空字典,空集合需用 set() 。
  • ​默认参数问题:避免将可变集合作为函数默认参数。
  • 顺序依赖集合无序,需顺序时改用有序字典或列表。

总结
Python集合凭借其唯一性、高效查询和丰富的集合运算,成为数据去重、关系分析和高频查询场景的利器。掌握其核心特性与方法(如add()、union()、issubset()),结合frozenset等高级用法,能显著提升代码效率。需注意集合的无序性和元素不可变性限制,合理选择数据结构以满足需求。


http://www.ppmy.cn/ops/166964.html

相关文章

数据结构——双向链表dlist

前言:大家好😍,本文主要介绍了数据结构——双向链表dlist 一 双向链表定义 1. 双向链表的节点结构 二 双向链表操作 2.1 定义 2.2 初始化 2.3 插入 2.3.1 头插 2.3.2 尾插 2.3.3 按位置插 2.4 删除 2.4.1 头删 2.4.2 尾删 2.4.3 按…

【PyTorch】.pt文件

.pt文件是 PyTorch 中用于保存张量(torch.Tensor)或模型(torch.nn.Module)的二进制文件格式。它使用 PyTorch 的序列化机制来保存数据,能够高效地存储和加载张量或模型的状态。 .pt 文件中存储的内容 1. 张量&#x…

pnpm config set ignore-workspace-root-check true

异常 ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don…

【后端】【django】Django DRF `@action` 详解:自定义 ViewSet 方法

Django DRF action 详解:自定义 ViewSet 方法 在 Django REST Framework(DRF)中,action 装饰器用于为 ViewSet 添加自定义的 API 端点。相比于 update、create 等默认方法,action 允许我们定义 更加清晰、语义化 的 A…

springboot基于session实现登录

文章目录 1.理解session2.理解ThreadLocal2.1 理解多线程2.2 理解lambda表达式2.3 ThreadLocal 3.基于session登录流程图4.具体登录的代码实现4.1短信发送功能4.2 短信验证码登录注册功能4.登录校验功能4.1 配置登录拦截器LoginInterceptor4.1.1 ThrealLocal类实现 4.2登录拦截…

EditRocket for Mac v5.0.2 文本编辑器 支持M、Intel芯片

应用介绍 EditRocket 是一款强大的跨平台文本编辑器,专为程序员、开发者和技术人员设计,提供了丰富的编程支持和多种开发工具。它支持各种编程语言,具备高效的代码编辑、调试、和文本处理功能,旨在提升编程效率和开发体验。 主要…

c语言数据结构——单向不带头不循环链表的实现

文章目录 单向不带头不循环链表链表与顺序表的区别多文件管理链表的定义结构获得链表节点个数链表增加元素链表的尾插及创建节点函数链表的头插任意位置节点后插入 判断链表是否为空链表删除元素链表的尾删链表的头删任意位置删除 链表查找元素链表修改元素单向链表的遍历链表销…

reactive数据修改无效

环境 vue:3.2.13 element-plus: 2.9.6 typescript:4.5.5 问题 表格列表页面,页面中有新增和修改操作,新增和修改共用一个弹窗,弹窗中表单绑定的数据修改无效。复现步骤是先点击表格中的修改,然后点击新…