Python 数据结构知识汇总
Python 数据结构知识汇总 前言Python 作为一门优雅且功能强大的编程语言其内置的数据结构是每个 Python 开发者必须掌握的基础知识。本文将系统性地介绍 Python 中五大核心数据结构字符串str、列表list、元组tuple、字典dict和集合set帮助读者建立完整的知识体系。一、字符串str1.1 什么是字符串字符串是 Python 中最常用的数据类型用于表示文本信息。可以使用单引号、双引号或三引号来定义。python# 字符串定义 str1 Hello World str2 Python str3 多行 字符串1.2 字符串的常用操作操作方法示例长度len()len(hello)→ 5索引[索引]hello[1]→ e切片[开始:结束:步长]hello[1:4]→ ell拼接Hello World→ HelloWorld重复*Hi * 3→ HiHiHi查找find()hello.find(e)→ 1替换replace()hello.replace(e, a)→ hallo分割split()a,b,c.split(,)→ [a,b,c]大写upper()hello.upper()→ HELLO小写lower()HELLO.lower()→ hello去除空格strip() hi .strip()→ hi判断字母数字isalnum()abc123.isalnum()→ True1.3 字符串的切片操作重点pythons Python学习 # 切片语法s[开始:结束:步长] print(s[0]) # P print(s[-1]) # 习 print(s[0:6]) # Python print(s[6:]) # 学习 print(s[::-1]) # 习学nohtyP反转字符串1.4 字符串格式化python# 三种常用格式化方式 # 1. % 格式化旧式 name 张三 age 18 print(姓名%s年龄%d % (name, age)) # 2. format() 方法 print(姓名{}年龄{}.format(name, age)) # 3. f-stringPython 3.6推荐 print(f姓名{name}年龄{age})二、列表list2.1 什么是列表列表是 Python 中最常用的可变容器类型可以存储任意类型的元素支持增删改查操作。python# 列表定义 list1 [] # 空列表 list2 [1, 2, 3] # 整数列表 list3 [a, b, c] # 字符串列表 list4 [1, hello, 3.14, True] # 混合类型2.2 列表的增删改查增加元素方法说明示例append()在末尾添加一个元素lst.append(4)insert()在指定位置插入lst.insert(0, 0)extend()合并另一个列表lst.extend([5,6])pythonlst [1, 2, 3] lst.append(4) # [1, 2, 3, 4] lst.insert(0, 0) # [0, 1, 2, 3, 4] lst.extend([5, 6]) # [0, 1, 2, 3, 4, 5, 6]删除元素方法说明示例pop()删除末尾元素可指定索引lst.pop()→ 返回删除的值remove()删除指定值的第一个匹配项lst.remove(2)del删除指定索引或切片del lst[0]或del lst[1:3]clear()清空列表lst.clear()pythonlst [1, 2, 3, 4, 5] lst.pop() # [1, 2, 3, 4] lst.pop(0) # [2, 3, 4] lst.remove(3) # [2, 4] del lst[0] # [4]修改元素pythonlst [1, 2, 3] lst[0] 100 # [100, 2, 3] lst[1:3] [200, 300] # [100, 200, 300]查询元素pythonlst [10, 20, 30, 20, 40] # 获取元素 print(lst[0]) # 10 print(lst[-1]) # 40 print(lst[1:4]) # [20, 30, 20] # 查找索引 print(lst.index(20)) # 1返回第一个匹配的索引 # 统计次数 print(lst.count(20)) # 2 # 判断是否存在 print(30 in lst) # True # 遍历 for item in lst: print(item) for i, item in enumerate(lst): print(f索引{i}: {item})2.3 列表推导式重点python# 生成 1-10 的平方列表 squares [i**2 for i in range(1, 11)] print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] # 带条件的列表推导式 even [i for i in range(1, 21) if i % 2 0] print(even) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] # 嵌套列表推导式 matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flatten [num for row in matrix for num in row] print(flatten) # [1, 2, 3, 4, 5, 6, 7, 8, 9]2.4 列表的常用函数函数说明示例len()获取长度len([1,2,3])→ 3max()获取最大值max([1,5,3])→ 5min()获取最小值min([1,5,3])→ 1sum()求和sum([1,2,3])→ 6sorted()排序返回新列表sorted([3,1,2])→ [1,2,3]reverse()反转列表lst.reverse()三、元组tuple3.1 什么是元组元组与列表类似但一旦创建不可修改不可变。使用小括号()定义。python# 元组定义 t1 () # 空元组 t2 (1, 2, 3) # 普通元组 t3 (1,) # 单元素元组注意逗号 t4 1, 2, 3 # 不加括号也可以3.2 元组的特点pythont (10, 20, 30, 40, 50) # ✅ 支持索引 print(t[0]) # 10 print(t[-1]) # 50 # ✅ 支持切片 print(t[1:4]) # (20, 30, 40) # ✅ 支持遍历 for item in t: print(item) # ✅ 支持成员判断 print(30 in t) # True # ❌ 不支持修改 t[0] 100 # TypeError: tuple object does not support item assignment3.3 元组的应用场景python# 1. 函数返回多个值 def get_student(): return 张三, 18, 男 name, age, sex get_student() print(name, age, sex) # 张三 18 男 # 2. 交换变量 a, b 10, 20 a, b b, a # 本质是元组解包 print(a, b) # 20 10 # 3. 作为字典的键列表不行 d {(1, 2): value} # ✅ 元组可以作为键 # d {[1, 2]: value} # ❌ 列表不可以作为键四、字典dict4.1 什么是字典字典是 Python 中唯一的键值对key-value映射类型通过键来访问值。键必须是不可变类型字符串、数字、元组值可以是任意类型。python# 字典定义 d1 {} # 空字典 d2 {name: 张三, age: 18} # 普通字典 d3 dict(name张三, age18) # 使用 dict() 函数4.2 字典的增删改查增加/修改pythond {name: 张三, age: 18} # 增加或修改 d[gender] 男 # 新增键值对 d[age] 19 # 修改已有键的值 # update() 合并字典 d.update({score: 90, grade: A}) print(d) # {name: 张三, age: 19, gender: 男, score: 90, grade: A}删除pythond {name: 张三, age: 18, gender: 男} # pop() 删除指定键并返回值 age d.pop(age) print(age) # 18 # popitem() 删除并返回最后一个键值对 item d.popitem() print(item) # (gender, 男) # del 删除指定键 del d[name] # clear() 清空 d.clear()查询pythond {name: 张三, age: 18, gender: 男} # 通过键取值键不存在会报错 print(d[name]) # 张三 # get() 取值键不存在返回 None 或默认值 print(d.get(name)) # 张三 print(d.get(score)) # None print(d.get(score, 0)) # 0 # 获取所有键 print(d.keys()) # dict_keys([name, age, gender]) # 获取所有值 print(d.values()) # dict_values([张三, 18, 男]) # 获取所有键值对 print(d.items()) # dict_items([(name, 张三), (age, 18), (gender, 男)]) # 遍历字典 for key in d: print(f{key}: {d[key]}) for key, value in d.items(): print(f{key}: {value})4.3 字典推导式python# 生成数字平方的字典 squares {i: i**2 for i in range(1, 6)} print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} # 筛选条件 even_squares {i: i**2 for i in range(1, 11) if i % 2 0} print(even_squares) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}4.4 字典的常用方法方法说明get(key, default)获取键的值不存在返回默认值setdefault(key, default)如果键存在返回其值否则插入键并设置默认值pop(key)删除键并返回其值keys()返回所有键的视图values()返回所有值的视图items()返回所有键值对的视图update(dict2)合并另一个字典五、集合set5.1 什么是集合集合是无序的、元素唯一的容器类型主要用于去重和集合运算交集、并集等。python# 集合定义 s1 set() # 空集合不能使用 {}那是空字典 s2 {1, 2, 3} # 普通集合 s3 set([1, 2, 2, 3, 3]) # [1, 2, 3]自动去重5.2 集合的操作添加元素pythons {1, 2, 3} # add() 添加单个元素 s.add(4) # {1, 2, 3, 4} s.add(2) # {1, 2, 3, 4}不会重复 # update() 添加多个元素 s.update([5, 6, 7]) # {1, 2, 3, 4, 5, 6, 7}删除元素pythons {1, 2, 3, 4, 5} # remove() 删除指定元素不存在报错 s.remove(3) # {1, 2, 4, 5} # discard() 删除指定元素不存在不报错 s.discard(10) # 不会报错 # pop() 随机删除并返回一个元素 item s.pop() # clear() 清空 s.clear()5.3 集合运算pythonA {1, 2, 3, 4, 5} B {4, 5, 6, 7, 8} # 交集 print(A B) # {4, 5} print(A.intersection(B)) # 并集 print(A | B) # {1, 2, 3, 4, 5, 6, 7, 8} print(A.union(B)) # 差集A 有 B 没有 print(A - B) # {1, 2, 3} print(A.difference(B)) # 对称差集不同时存在的 print(A ^ B) # {1, 2, 3, 6, 7, 8} print(A.symmetric_difference(B)) # 判断子集 print({1, 2} A) # True{1,2} 是 A 的子集 # 判断超集 print(A {1, 2}) # TrueA 是 {1,2} 的超集5.4 集合的去重应用python# 去重 lst [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] unique list(set(lst)) print(unique) # [1, 2, 3, 4] # 统计字符串中的不同字符 text hello world chars set(text) print(chars) # {h, e, l, o, , w, r, d}六、数据结构对比总结6.1 快速对比表特性列表 (list)元组 (tuple)字典 (dict)集合 (set)符号[](){}{}可变性✅ 可变❌ 不可变✅ 可变✅ 可变有序性✅ 有序✅ 有序✅ 有序Python 3.7❌ 无序元素唯一性❌ 可重复❌ 可重复✅ 键唯一✅ 元素唯一索引方式整数索引整数索引键key不支持索引适用场景存储有序数据存储不可变数据键值映射去重、集合运算6.2 使用场景速查python# 列表需要频繁修改的有序数据 students [张三, 李四, 王五] # 元组不需要修改的数据或函数返回多个值 coordinates (10, 20) # 字典需要键值映射的数据 user {name: 张三, age: 18} # 集合去重或集合运算 unique_numbers {1, 2, 3, 4, 5}七、常见面试题7.1 列表和元组的区别区别列表元组可变性可变不可变性能较慢需要额外分配内存较快固定大小使用场景需要修改的数据不需要修改的数据7.2 字典和集合的区别区别字典集合元素类型键值对单个元素键唯一性键唯一元素唯一使用场景映射关系去重、集合运算7.3 可变对象 vs 不可变对象python# 不可变对象修改会创建新对象 s hello s s world # 创建了新字符串 # 可变对象修改不会创建新对象 lst [1, 2, 3] lst.append(4) # 在原列表上修改八、总结本文系统介绍了 Python 中五大核心数据结构字符串str文本处理不可变列表list有序可变容器最常用的序列类型元组tuple有序不可变容器安全性高字典dict键值映射高效查找集合set无序不重复元素去重与集合运算掌握这些数据结构是学好 Python 的基础建议在实际编码中多加练习理解每种数据结构的特性和适用场景。本文首发于 CSDN欢迎点赞、收藏、转发 如有问题欢迎在评论区留言交流。

相关新闻

10分钟搞定Windows Dlib安装:Python 3.7-3.14预编译包完全指南

10分钟搞定Windows Dlib安装:Python 3.7-3.14预编译包完全指南

10分钟搞定Windows Dlib安装:Python 3.7-3.14预编译包完全指南 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 还在为W…

2026/10/15 12:20:25 阅读更多 →
暗黑破坏神2终极优化指南:3步让经典游戏在现代PC上焕然一新

暗黑破坏神2终极优化指南:3步让经典游戏在现代PC上焕然一新

暗黑破坏神2终极优化指南:3步让经典游戏在现代PC上焕然一新 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是…

2026/10/2 9:55:33 阅读更多 →
跨平台资源下载解决方案:如何用res-downloader一站式解决全网视频下载难题

跨平台资源下载解决方案:如何用res-downloader一站式解决全网视频下载难题

跨平台资源下载解决方案:如何用res-downloader一站式解决全网视频下载难题 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloa…

2026/10/14 19:48:10 阅读更多 →

最新新闻

MCP与A2A:构建可工程化落地的多Agent系统

MCP与A2A:构建可工程化落地的多Agent系统

1. 这不是概念炒作,是工程落地的分水岭“多 Agent、MCP、A2A——最该补的一堂课”,这标题乍看像培训广告,实则戳中了当前智能系统开发里最真实、最普遍、也最容易被忽视的断层。我带过七支不同行业的AI工程团队,从金融风控后台到工…

2026/10/15 12:20:55 阅读更多 →
CPD级联部分解码器:显著目标检测的速度与精度平衡实践

CPD级联部分解码器:显著目标检测的速度与精度平衡实践

1. 为什么CPD值得单独拿出来聊显著目标检测这个方向,做过的人都知道,模型精度和推理速度几乎是一对天敌。早期的方法要么精度勉强能看但跑一张图要几百毫秒甚至上秒级,要么速度快但边缘糊成一团、小目标直接漏检。CVPR 2019那篇Cascaded Part…

2026/10/15 12:20:55 阅读更多 →
SpringBoot3+Vue3全栈进销存系统开发实战

SpringBoot3+Vue3全栈进销存系统开发实战

1. 项目概述:全栈进销存系统开发指南这套教程面向需要完成毕业设计或希望掌握全栈开发技能的初学者,通过SpringBoot3Vue3技术栈实现一个完整的进销存管理系统。我在实际企业级项目开发中发现,这类系统涵盖了前后端分离架构中最典型的CRUD操作…

2026/10/15 12:20:55 阅读更多 →
SSM+Vue旅游网站开发实战与毕业设计指南

SSM+Vue旅游网站开发实战与毕业设计指南

1. 项目背景与核心价值 去年指导过一位计算机专业学生的毕业设计,他选择了旅游资源网站作为课题。这个选题看似普通,但实际开发中涉及的技术栈组合和业务逻辑复杂度,完全能够支撑起一个合格的本科毕业设计。SSM(SpringSpringMVCMy…

2026/10/15 12:20:55 阅读更多 →
SpringBoot3+Vue3企业级进销存系统开发实战

SpringBoot3+Vue3企业级进销存系统开发实战

1. 项目概述:企业级进销存系统开发实战这套教程是我在指导了37名计算机专业毕业生后提炼出的实战方案,专门针对需要完成毕业设计又缺乏商业项目经验的学生群体。不同于市面上简单的CRUD示例,我们采用SpringBoot3Vue3技术栈实现了一个具备完整…

2026/10/15 12:20:55 阅读更多 →
Django 后端实战指南_3:插入 RBAC 测试数据

Django 后端实战指南_3:插入 RBAC 测试数据

阶段 3:插入 RBAC 测试数据 合辑:Django 系统阶段开发手册 | 阶段:3 / 18 | 定位:以自定义管理命令初始化 RBAC 测试数据,并多渠道验证四张表中的数据关系 | 建议学时:3–…

2026/10/15 12:19:54 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →