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/10/22 22:35:18 阅读更多 →
医用温控仪读数乱屏死机?抗干扰兼容高性价比方案

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

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

2026/10/22 0:52:49 阅读更多 →
Node.js API兼容性问题解析与解决方案

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

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

2026/10/22 17:04:11 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/22 21:33:42 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:50:56 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 19:06:46 阅读更多 →