Python 数据结构知识汇总:str、list、tuple、dict、set
由于前几天给大家介绍过字符串,元组,列表,字典.今天给大家介绍集合.同时对前几天的知识进行汇总,Python 提供了多种内置数据结构用于存储和组织数据。不同的数据结构有不同的特点和适用场景选择合适的结构能让代码更简洁、效率更高。这篇文章将系统性地对比和汇总 Python 中五种最常用的数据结构字符串str、列表list、元组tuple、字典dict和集合set。一、总体对比在深入了解每种结构之前先通过一张表格建立整体认识特性strlisttupledictset是否可变不可变可变不可变可变可变是否有序有序有序有序有序Python 3.7无序是否允许重复允许允许允许键唯一元素唯一元素类型字符任意任意键值对任意二、字符串str字符串是不可变的字符序列用引号括起来表示。定义方式# 单引号、双引号、三引号 s1 hello s2 world s3 多行字符串 核心特性s Python # 索引正向从0开始负向从-1开始 print(s[0]) # P print(s[-1]) # n # 切片 [start:end:step] print(s[1:4]) # yth print(s[::-1]) # nohtyP反转 # 不可变性 # s[0] J # TypeError常用方法方法分类常用方法大小写转换upper()、lower()、capitalize()、title()去除空白strip()、lstrip()、rstrip()查找判断find()、index()、startswith()、endswith()、count()拆分拼接split()、join()替换replace()类型判断isalpha()、isdigit()、isalnum()、isspace()text Hello, World! print(text.strip()) # Hello, World! print(text.lower()) # hello, world! print(text.replace(World, Python)) # Hello, Python! print(text.split(,)) # [ Hello, World! ]格式化name 张三 age 25 # f-string print(f我叫{name}今年{age}岁) # format() 方法 print(我叫{}今年{}岁.format(name, age)) # % 格式化 print(我叫%s今年%d岁 % (name, age))三、列表list列表是可变的有序序列用方括号[]表示可以存放任意类型的元素。定义方式# 直接定义 nums [1, 2, 3, 4, 5] mixed [1, hello, 3.14, [1, 2]] # 空列表 empty [] # list() 构造 chars list(abc) # [a, b, c] r list(range(5)) # [0, 1, 2, 3, 4] # 列表推导式 squares [x**2 for x in range(1, 6)] # [1, 4, 9, 16, 25]核心操作nums [1, 2, 3, 4, 5] # 索引访问和修改 print(nums[0]) # 1 nums[2] 99 # [1, 2, 99, 4, 5] # 切片 print(nums[1:4]) # [2, 99, 4] print(nums[::-1]) # [5, 4, 99, 2, 1]常用方法操作类型方法添加append()、insert()、extend()删除pop()、remove()、clear()查找index()、count()、in排序sort()、reverse()、sorted()、reversed()nums [1, 2, 3] # 添加 nums.append(4) # [1, 2, 3, 4] nums.insert(0, 0) # [0, 1, 2, 3, 4] nums.extend([5, 6]) # [0, 1, 2, 3, 4, 5, 6] # 删除 last nums.pop() # 6nums变为 [0, 1, 2, 3, 4, 5] nums.remove(3) # [0, 1, 2, 4, 5] # 查找 print(nums.index(4)) # 3 print(2 in nums) # True列表复制a [1, 2, 3] # 引用赋值错误 b a b.append(4) print(a) # [1, 2, 3, 4] 原列表被修改 # 浅拷贝正确 a [1, 2, 3] b a[:] # 或 list(a) 或 a.copy() b.append(4) print(a) # [1, 2, 3] 原列表不变四、元组tuple元组是不可变的有序序列用圆括号()表示。与列表类似但创建后不能修改。定义方式# 直接定义 t1 (1, 2, 3) t2 (a, b, c) # 单元素元组注意逗号 t3 (1,) # 正确类型为 tuple t4 (1) # 错误类型为 int # 不加括号也可以 t5 1, 2, 3 # (1, 2, 3) # tuple() 构造 t6 tuple([1, 2, 3]) # (1, 2, 3)核心特性t (1, 2, 3, 4, 5) # 索引和切片与列表相同 print(t[0]) # 1 print(t[1:4]) # (2, 3, 4) # 不可变性 # t[0] 10 # TypeError: tuple object does not support item assignment # 元组可以包含可变元素 t (1, 2, [3, 4]) t[2].append(5) # (1, 2, [3, 4, 5]) 元组本身不变但内部列表变了元组的常用操作由于元组不可变它的方法比列表少方法说明count()统计元素出现次数index()查找元素索引in判断元素是否存在t (1, 2, 3, 2, 4, 2) print(t.count(2)) # 3 print(t.index(3)) # 2 print(4 in t) # True元组的解包t (1, 2, 3) a, b, c t print(a, b, c) # 1 2 3 # 配合 enumerate 使用 for index, value in enumerate([10, 20, 30]): print(index, value) # 0 10, 1 20, 2 30五、字典dict字典是可变的键值对集合用花括号{}表示。键必须是不可变类型且唯一值可以是任意类型。定义方式# 直接定义 person {name: 张三, age: 25, city: 北京} # 空字典 empty {} # dict() 构造 person dict(name李四, age30) # {name: 李四, age: 30} person dict([(name, 王五), (age, 28)]) # 从键值对列表 # 字典推导式 squares {x: x**2 for x in range(1, 6)} # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}核心操作person {name: 张三, age: 25} # 访问推荐使用 get 安全访问 print(person[name]) # 张三 print(person.get(city, 未知)) # 未知不存在返回默认值 # 添加/修改 person[city] 北京 # 添加 person[age] 26 # 修改 # 删除 del person[city] # 删除指定键 age person.pop(age) # 删除并返回值 person.clear() # 清空常用方法操作类型方法访问get()、setdefault()修改update()删除pop()、popitem()、clear()遍历keys()、values()、items()复制copy()、deepcopy()字典遍历person {name: 张三, age: 25, city: 北京} # 遍历键 for key in person: print(key) # 遍历值 for value in person.values(): print(value) # 同时遍历键和值最常用 for key, value in person.items(): print(f{key}: {value})字典与JSON字典与JSON格式天然对应可通过json模块互转import json # 字典 → JSON字符串序列化 data {name: 张三, age: 25, scores: [85, 92]} json_str json.dumps(data, ensure_asciiFalse, indent2) # JSON字符串 → 字典反序列化 data json.loads(json_str)六、集合set集合是可变的无序集合元素唯一且必须是可哈希不可变类型。用花括号{}表示但注意空集合必须用set()创建。定义方式# 直接定义 s {1, 2, 3, 4, 5} mixed {1, hello, 3.14, (1, 2)} # 元组可以列表不可以 # 空集合注意{} 是空字典 empty set() # set() 构造 s set([1, 2, 2, 3, 3, 3]) # {1, 2, 3} 自动去重 s set(hello) # {h, e, l, o}核心特性s {1, 2, 3, 4, 5} # 自动去重 s {1, 1, 2, 2, 3} # {1, 2, 3} # 无序性不支持索引 # print(s[0]) # TypeError: set object is not subscriptable # 添加和删除 s.add(6) # {1, 2, 3, 4, 5, 6} s.remove(3) # {1, 2, 4, 5, 6} 不存在会报错 s.discard(10) # 不存在也不会报错 s.pop() # 删除并返回一个任意元素集合运算集合支持数学上的各种集合运算运算方法说明并集union()两个集合的所有元素交集intersection()两个集合共有的元素差集difference()属于前者不属于后者的元素对称差集symmetric_difference()属于任意一个但不同时属于两者的元素a {1, 2, 3, 4} b {3, 4, 5, 6} print(a | b) # {1, 2, 3, 4, 5, 6} 并集 print(a b) # {3, 4} 交集 print(a - b) # {1, 2} 差集属于a不属于b print(a ^ b) # {1, 2, 5, 6} 对称差集集合的常用场景# 1. 列表去重 nums [1, 2, 2, 3, 3, 3, 4] unique list(set(nums)) # [1, 2, 3, 4] # 2. 快速判断元素是否存在 s {1, 2, 3, 4, 5} print(3 in s) # True集合的 in 操作比列表快得多 # 3. 寻找共同好友/共同标签 friends_a {张三, 李四, 王五} friends_b {李四, 王五, 赵六} common friends_a friends_b # {李四, 王五}七、五种数据结构对比总结特性strlisttupledictset可变性不可变可变不可变可变可变有序性有序有序有序有序无序元素重复允许允许允许键唯一元素唯一元素类型字符任意任意键值对可哈希类型索引访问可以可以可以用键访问不可以定义空对象[](){}set()适用场景文本处理有序数据序列不可变数据序列键值映射、配置去重、集合运算八、选择指南根据实际需求选择合适的数据结构# 1. 处理文本 → str text Hello, World! # 2. 需要存储有序的多个值且可能修改 → list scores [85, 92, 78, 90] # 3. 需要存储有序的多个值且不会被修改 → tuple coordinates (10, 20) # 4. 需要通过键快速查找对应的值 → dict user {id: 1001, name: 张三, status: active} # 5. 需要去重或进行集合运算 → set tags {python, data, analysis}九、类型转换速查目标类型转换方法转字符串str(obj)转列表list(obj)转元组tuple(obj)转字典需要键值对格式转集合set(obj)自动去重s hello print(list(s)) # [h, e, l, l, o] print(tuple(s)) # (h, e, l, l, o) print(set(s)) # {h, e, l, o} 去重后 lst [(a, 1), (b, 2)] print(dict(lst)) # {a: 1, b: 2}十、总结Python 的五大核心数据结构各有特点和适用场景掌握它们之间的区别和联系是写出高质量Python代码的基础str不可变字符序列专注文本处理list可变有序序列使用频率最高tuple不可变有序序列比列表更轻量、更安全dict可变键值映射通过键快速查找set可变无序集合自动去重 集合运算理解每种结构的特点在实际编码中选出最合适的那一个代码会变得更清晰、更高效。如果觉得这篇内容对你有帮助欢迎收藏备用。

相关新闻

MacBook隐形架构解析:性能背后的设计哲学

MacBook隐形架构解析:性能背后的设计哲学

1. MacBook设计哲学的五个隐形架构支柱当大多数人谈论MacBook时,首先想到的是视网膜显示屏、Unibody机身或者macOS系统这些看得见摸得着的特性。但真正让MacBook在专业领域持续领先的,是那些用户几乎感受不到却时刻在发挥作用的基础架构决策。这些设计选…

2026/7/22 4:30:29阅读更多 →
医用温控仪读数乱屏死机?抗干扰兼容高性价比方案

医用温控仪读数乱屏死机?抗干扰兼容高性价比方案

做医用温控仪器研发、采购的同行都清楚,恒温培养箱、高温灭菌柜、医用恒温水浴、输液加温仪这一类设备,有三大绕不开的选型痛点。第一,设备内部加热继电器、变频风机频繁通断,手术室、检验科还有超声、电刀等设备产生强电磁辐射&a…

2026/7/22 4:30:29阅读更多 →
Node.js API兼容性问题解析与解决方案

Node.js API兼容性问题解析与解决方案

1. Node.js API兼容性现状解析作为从Node.js 0.10时代就开始使用的老开发者,我亲眼见证了Node.js生态系统的快速演进。每次大版本升级,最让人头疼的不是新功能的学习,而是那些"突然消失"或"行为突变"的API。当前Node.js最…

2026/7/22 4:30:29阅读更多 →
2025年AI写作工具市场现状与六大平台评测

2025年AI写作工具市场现状与六大平台评测

1. 2025届AI写作工具市场现状2025年的内容创作领域已经全面进入AI协作时代。根据最新行业调研数据显示,超过78%的专职内容创作者和92%的企业营销部门都在日常工作中使用AI写作工具。这种普及度主要源于三个关键因素:首先是自然语言处理技术的突破性进展&…

2026/7/22 5:20:38阅读更多 →
AI和你聊天时候迎合你甚至谄媚你的底层逻辑与应对策略

AI和你聊天时候迎合你甚至谄媚你的底层逻辑与应对策略

AI聊天时的迎合(学界叫 Sycophancy,谄媚性偏见),本质上是当前训练目标与数据偏差共同导致的“奖励黑客”行为,不是它有情商,而是它在钻KPI的空子:RLHF的奖励错位(核心原因&#xff0…

2026/7/22 5:20:38阅读更多 →
Python_OpenCV入门到精通——入门篇(看这一篇就足够了!!!)

Python_OpenCV入门到精通——入门篇(看这一篇就足够了!!!)

下载课:weiranit.fun/16795/ 零基础学机器视觉:Python OpenCV 从入门到项目开发 声明:以下内容基于互联网公开的技术课程与项目实践信息整理,仅供图像处理与计算机视觉技术学习参考。 “零基础”这三个字,在机器视觉领…

2026/7/22 5:20:38阅读更多 →
NASA开源库提升Three.js地理数据渲染能力

NASA开源库提升Three.js地理数据渲染能力

1. 项目背景:NASA开源库如何突破Three.js地理数据渲染极限当NASA决定将卫星级地理数据渲染能力开放给Three.js开发者时,整个WebGL社区都为之震动。这个名为Nexus threejs的开源库(项目代号Solar System Treks)解决了传统Web三维可…

2026/7/22 5:20:38阅读更多 →
C++异构AI系统零拷贝传输:5大架构模式与工程实践

C++异构AI系统零拷贝传输:5大架构模式与工程实践

1. 项目概述:为什么异构AI系统需要零拷贝传输?如果你正在用C开发一个AI应用,大概率会遇到这样的场景:你的模型推理部分跑在GPU上,但数据预处理、业务逻辑、网络通信却在CPU上。数据在CPU内存和GPU显存之间来回搬运&…

2026/7/22 5:20:38阅读更多 →
VC++ BMP图像读取与显示:从文件结构到GDI绘制的完整实现

VC++ BMP图像读取与显示:从文件结构到GDI绘制的完整实现

1. 项目概述:为什么从BMP开始?如果你刚开始接触Windows桌面开发,或者想深入理解计算机图形学的底层逻辑,那么“用VC读取并显示一张BMP图片”绝对是一个绝佳的起点。这听起来像是一个简单的任务,但麻雀虽小,…

2026/7/22 5:18:38阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →