Python 五大核心数据结构完全指南:列表(List)、字符串(String)、元组(Tuple)、集合(Set)、字典(Dictionary)

作者:FrontPy日期:2026/6/20

Python 核心数据结构完全指南

一、列表 (List)

1.1 定义与特点

列表是 Python 中最常用的数据容器,可以一次性存储多个元素。

定义:

1列表名 = [元素1, 元素2, 元素3, ...]
2

例如:

1s = [54, 15, 75, 108, 23, 78, 75]
2

特点:

  • 可以存储不同类型的元素(数字、字符串、布尔值等混合存放)。
  • 元素有序,排列顺序固定。
  • 元素可以重复
  • 元素可以被修改(增、删、改)。
  • 属于序列类型:可通过索引访问。

1.2 列表的索引

  • 正向索引:从 0 开始,从左向右。
  • 反向索引:从 -1 开始,从右向左。

1.3 元素的查看、修改与删除

操作语法示例说明
查看s[0]获取第一个元素
修改s[0] = 100将第一个元素改为100
删除del s[3]删除索引为3的元素

1.4 列表的切片

1语法:s[start:end:step]
2
  • start:开始索引(包含),不指定默认为 0
  • end:结束索引(不包含),不指定默认为列表长度(即取到末尾)。
  • step:步长,不指定默认为 1

示例:

1s = [54, 15, 75, 108, 23, 78, 75]
2print(s[1:4])    # [15, 75, 108]   (索引1~3)
3print(s[:3])     # [54, 15, 75]    (开头到索引2)
4print(s[3:])     # [108, 23, 78, 75](索引3到末尾)
5print(s[::2])    # [54, 75, 23, 75]  (步长为2,跳过一个取一个)
6

1.5 列表的常用方法

方法作用示例
append(x)在列表尾部追加元素 xs.append(10086)
insert(i, x)在索引 i 之前插入元素 xs.insert(0, 92)
remove(x)移除列表中第一个匹配到的值 xs.remove(75)
pop(i)删除索引 i 处的元素,并返回该元素(默认删除最后一个)s.pop(2) 或 s.pop()
sort()对列表进行排序(要求元素类型一致)s.sort()
reverse()反转列表元素的顺序s.reverse()

完整示例:

1s = [54, 15, 75, 108, 23, 78, 75]
2
3s.append(10086)          # [54, 15, 75, 108, 23, 78, 75, 10086]
4s.insert(0, 92)          # [92, 54, 15, 75, 108, 23, 78, 75]
5s.remove(75)             # 移除第一个75
6s.pop(2)                 # 删除并返回索引2的元素
7s.pop()                  # 删除并返回最后一个元素
8s.sort()                 # 升序排序
9s.reverse()              # 反转
10

二、字符串 (String)

2.1 定义与特点

字符串是字符的容器,用于存储文本信息。

定义:

1s = "Python"
2s = 'Python'
3s = """多行
4字符串"""
5

特点:

  • 不可变性:一旦创建,无法修改(所有“修改”操作实际是生成了新字符串)。
  • 有序性:每个字符都有固定的位置。
  • 可迭代性:可以用 for 循环遍历每个字符。

2.2 字符串的索引

  • 正向索引:从 0 开始。
  • 反向索引:从 -1 开始。
1s = "Python"
2print(s[0])    # P
3print(s[-1])   # n
4

2.3 字符串的切片

切片语法与列表相同:s[start:end:step]

  • start:开始索引,默认 0
  • end:结束索引(不包含),默认字符串长度(即末尾)。
  • step:步长,默认 1;若为 -1 则从后向前取。
1s = "Python"
2print(s[0:2])    # Py
3print(s[:3])     # Pyt
4print(s[2:])     # thon
5print(s[::-1])   # nohtyP  (反转字符串)
6

2.4 字符串的常用方法

方法作用示例
find(sub)在字符串中查找子串,返回第一次出现的索引,找不到返回 -1s.find('Python')
count(sub)统计子串在字符串中出现的次数s.count('H')
upper()将字符串所有字母转换为大写s.upper()
lower()将字符串所有字母转换为小写s.lower()
split(sep)将字符串按指定分隔符分割成列表s.split(' ')
strip(chars)去除字符串两端指定的字符(默认去除空白字符)s.strip() 或 s.strip('*')
replace(old, new)将字符串中的指定子串替换为新子串s.replace('H','C')
startswith(prefix)检查字符串是否以指定子串开头,返回布尔值s.startswith('P')

完整示例:

1s = "Hello Python"
2
3print(s.find('Python'))    # 6
4print(s.count('o'))        # 2
5print(s.upper())           # HELLO PYTHON
6print(s.lower())           # hello python
7print(s.split(' '))        # ['Hello', 'Python']
8print(s.strip())           # 去除两端空格
9print(s.replace('H','C'))  # Cello Python
10print(s.startswith('H'))   # True
11

三、元组 (Tuple)

3.1 定义与特点

元组与列表类似,也是一种序列容器,但它是不可变的。

定义:

1t = (1, 2, 3, 4)
2t = 1, 2, 3           # 括号可省略
3t = (42, )            # 单元素元组必须加逗号
4

特点:

  • 可以存储不同类型元素。
  • 元素有序、可重复。
  • 不可修改(无法增、删、改元素),因此具有更高的安全性和性能。
  • 可作为字典的键(因为不可变)。

3.2 元组的索引与切片

与列表完全相同,通过索引访问元素,支持切片操作,但不能修改。

1t = (10, 20, 30, 40)
2print(t[0])       # 10
3print(t[-1])      # 40
4print(t[1:3])     # (20, 30)
5

3.3 元组的常用方法

由于不可变,元组的方法非常少,仅有两个:

方法作用示例
count(x)统计元素 x 在元组中出现的次数t.count(20)
index(x)返回元素 x 第一次出现的索引t.index(30)

示例:

1t = (10, 20, 20, 30)
2print(t.count(20))   # 2
3print(t.index(30))   # 3
4

提示:元组本身不可修改,但如果元组内包含可变对象(如列表),该对象的内容可以改变。


四、集合 (Set)

4.1 定义与特点

集合是无序且不重复的元素集合,主要用于去重和数学运算(交集、并集等)。

定义:

1s = {1, 2, 3, 4}
2s = set([1, 2, 3])   # 通过 set() 函数创建
3

特点:

  • 元素无序(不支持索引访问)。
  • 元素不可重复(自动去重)。
  • 元素必须是不可变类型(如数字、字符串、元组),不能包含列表或字典。
  • 可变容器,可以增删元素。

4.2 集合的基本操作

  • 添加元素:add(x)
  • 删除元素:remove(x)(若不存在会报错)、discard(x)(不存在不报错)
  • 随机弹出一个元素:pop()
  • 清空集合:clear()

示例:

1s = {1, 2, 3}
2s.add(4)              # {1, 2, 3, 4}
3s.remove(2)           # {1, 3, 4}
4s.discard(10)         # 不存在,不报错
5item = s.pop()        # 随机移除并返回一个元素
6print(item)
7

4.3 集合的数学运算

方法作用示例
union(set) 或 |并集s1 | s2
intersection(set) 或 &交集s1 & s2
difference(set) 或 -差集s1 - s2
symmetric_difference(set) 或 ^对称差集(并集减去交集)s1 ^ s2

示例:

1a = {1, 2, 3}
2b = {2, 3, 4}
3print(a | b)   # {1, 2, 3, 4}  并集
4print(a & b)   # {2, 3}        交集
5print(a - b)   # {1}           差集
6print(a ^ b)   # {1, 4}        对称差集
7

4.4 集合的其他常用方法

方法作用
update(set)添加多个元素(相当于求并集并更新原集合)
intersection_update(set)只保留交集部分
difference_update(set)移除差集部分
issubset(set)判断是否为子集
issuperset(set)判断是否为超集

五、字典 (Dictionary)

5.1 定义与特点

字典是存储键值对的容器,通过键来快速访问值。

定义:

1d = {"name": "Alice", "age": 25, "city": "Beijing"}
2d = dict(name="Bob", age=30)
3

特点:

  • 键唯一,且键必须是不可变类型(字符串、数字、元组等)。
  • 值可以是任意类型,允许重复。
  • 元素无序(Python 3.7+ 开始,字典会保持插入顺序)。
  • 可变容器,可以增、删、改键值对。

5.2 访问与修改

  • 通过键访问:d["name"]
  • 安全访问(避免键不存在报错):d.get("name", default)
  • 添加/修改:d["key"] = value
  • 删除键值对:del d["key"]d.pop("key")

示例:

1d = {"name": "Alice", "age": 25}
2print(d["name"])          # Alice
3print(d.get("gender", "未知"))  # 未知
4d["age"] = 26             # 修改
5d["city"] = "Shanghai"    # 添加
6del d["age"]              # 删除
7

5.3 字典的常用方法

方法作用示例
keys()返回所有键d.keys()
values()返回所有值d.values()
items()返回所有键值对(元组列表)d.items()
pop(key)删除指定键并返回其值d.pop("name")
popitem()随机删除并返回一个键值对(Python 3.7+ 删除最后一个插入的)d.popitem()
update(dict)将另一个字典的键值对合并到当前字典d.update({"gender": "F"})
clear()清空字典d.clear()
setdefault(key, default)若键不存在则添加键并设默认值,返回最终值d.setdefault("score", 0)

示例:

1d = {"name": "Alice", "age": 25}
2print(d.keys())          # dict_keys(['name', 'age'])
3print(d.values())        # dict_values(['Alice', 25])
4print(d.items())         # dict_items([('name', 'Alice'), ('age', 25)])
5
6d.update({"age": 26, "city": "Beijing"})   # 有则改,无则加
7d.setdefault("score", 100)                # 若不存在 score,则添加并返回100
8print(d)
9

5.4 遍历字典

1# 遍历键
2for key in d:
3    print(key)
4
5# 遍历值
6for value in d.values():
7    print(value)
8
9# 遍历键值对
10for key, value in d.items():
11    print(f"{key}: {value}")
12

六、总结对比

数据结构有序性可变性元素重复访问方式典型使用场景
列表索引存储有序数据序列
字符串索引文本处理
元组索引不可变数据、字典键
集合不可索引去重、数学运算
字典❌(3.6+)键不重复通过键键值映射、缓存

熟练掌握这五种核心数据结构,是 Python 编程的基础。建议多写代码、多实践,才能真正理解它们的差异和适用场景。


Python 五大核心数据结构完全指南:列表(List)、字符串(String)、元组(Tuple)、集合(Set)、字典(Dictionary)》 是转载文章,点击查看原文


相关推荐


prototype 注入到 singleton 里,prototype是否还是线程安全的
swordbob2026/6/12

"如果 prototype Bean 内部没有共享状态,自身是线程安全的。但 Spring 容器对 prototype 的多例行为有'陷阱',可能导致实际使用中不安全。" 展开讲: prototype 注入到 singleton 里的线程安全分析 一、prototype Bean 自身的线程安全性 1.1 prototype 本身是"独立实例"(这个是安全的) @Service@Scope("prototype")public class ShoppingCart { priv


局部两极分析破解数学建模难题
luj_17682026/6/5

当前博文未提及该问题,以下是基于C知道的知识内容为您回答 在数学建模中,通过“局部两极分析”实现问题求解的突破,其核心思想是:在复杂系统的局部或特定维度上,分别考察其极大化与极小化两种极端状态或趋势,通过分析这两种对立极值的行为、约束与相互作用,来洞察系统的本质结构、关键矛盾与优化路径,从而为全局问题的求解找到突破口。 这种方法融合了优化理论、博弈论和系统分析的思想。 一、 “局部两极分析”的核心逻辑与步骤 “局部两极分析”并非一个固定的算法,而是一种建模策略与思维框架。其通用实施流程可概


ASP.NET Core Razor 语法简述
叫我少年2026/5/30

如果写过 HTML 里嵌 <?php ?>​ 的页面吧?Razor 干的事差不多,只不过嵌入式用的是 C#。Razor 标记可以塞进 .cshtml​(MVC 视图/Razor Pages)或者 .razor​(Blazor 组件),写法跟 Vue 的模板语法有几分神似。下面从最基础的开始,一路讲到那些容易被忽视的坑。 1. 怎么输出 HTML Razor 的默认语言就是 HTML,你写 <p>Hello</p>​,它就乖乖输出 <p>Hello</p>​。但是想混入 C# 逻辑的时候,就得靠


Layui结合springboot读取返回值,前端展示简单示例
一个心烑2026/5/7

一、SpringBoot 后端接口 + Layui 前端页面实现 1 后端返回 JSON 数据 2 前端 Layui 表格展示数据 3 前端表单提交保存到后端 4 完整的异步请求(Ajax)处理 项目结构(标准 SpringBoot): springboot-layui-demo/ ├── src/main/java/com/demo/ │ ├── controller/ │ │ └── UserController.java # 接口控制器 │ ├── entity/ │


算个账也要开顶配 AI?我让 AI 自己劝我换了个小的
小墨同学boy2026/4/28

其实我自己每个月在 AI 上花的钱不少,Claude、GPT、GLM 都有订阅。但其实有很大一部分预算其实是花在处理生活琐事上的——记账、外卖归类、做一个消费数据分析。这种活差不多每天都得跑一遍,所以token 烧得也不少,尤其是有时候开了深度思考的模型反而更容易给错数据。 后来我才反应过来,手里订阅一个不少,结果我一直在拿 Opus 的钱让它当我的计算器。有点奢侈了,所以我准备切换思路看看有没有节省token的办法。 一、我发现一个反直觉的事 在日常生活当中,我的直觉一直是有钱就上好的贵的效果


2026 年前端工程师面试:一份来自面试官视角的真实复盘
怕浪猫2026/4/19

前言:为什么我要写这篇文章 前两天和一个在高校和企业都面试过不少候选人的"面试官老炮"聊天,他听过太多候选人抱怨面试内容脱离实际、工作用不到。也听过面试官抱怨候选人只会背题、动手能力差。有意思的是,这两拨人的抱怨,往往都对。 今天我想换个视角——不站在候选人角度刷题,也不站在理论派角度讲八股文,而是站在有实际招聘需求、真正要带团队干活的面试官视角,聊聊 2026 年的前端工程师面试,到底在考什么、为什么这么考。 核心结论先行 2026 年的前端面试,考察维度已经发生了结构性变化:


【折腾】windows下小狼毫输入法更新字库
stereohomology2026/4/11

我问DeepSeek如何更新,而不是自己从文档里面找,结果效率很高、回答很全面,直接给出步骤和命令。 作为菜鸟,我用第一种方法: 这个错误提示很明确:你当前所在的目录(即小狼毫的用户文件夹)不是空的,而 git clone 要求目标目录必须是空目录才能执行。 小狼毫默认安装后,用户文件夹里会自带一些基础配置文件(比如 default.custom.yaml、weasel.custom.yaml、luna_pinyin.schema.yaml 等)。直接 git clone 到非空目录就会报这个


吴恩达《LangChain LLM 应用开发精读笔记》8-Document Loading 文档加载
勇气要爆发2026/4/3

大家好,我是飞哥!👋 欢迎来到吴恩达《LangChain:Chat with Your Data》系列课程的第二讲。上一讲我们了解了 RAG 的全流程,今天我们正式开工,攻克第一关:Document Loading (文档加载)。 1. 为什么:Garbage In, Garbage Out 🗑️ 💡 场景锚定 做饭要先买菜洗菜,训练 AI 也是一样。如果你喂给 AI 的数据格式乱七八糟、乱码满天飞,那么 AI 输出的答案肯定也是一塌糊涂。 PDF 里有复杂的表格和页眉页脚。网页里有一堆


CSS 全栈指南:从基础到 2025 新特性
橘子编程2026/3/25

CSS 知识详解 从层叠规则到现代布局,从自定义属性到容器查询,系统梳理 CSS 全栈知识,涵盖 W3C 2025 最新特性,助你写出优雅、高性能的样式代码。 目录 什么是 CSS语法与引入方式层叠与继承选择器优先级CSS 选择器大全伪类与伪元素CSS 盒模型Display 与定位Flexbox 弹性布局Grid 网格布局字体与文本颜色与背景变换与过渡CSS 动画自定义属性(变量)响应式设计现代 CSS 特性最佳实践 一、什么是 CSS CSS(Cascading S


【宇树机器人强化学习】(二):ActorCritic网络和ActorCriticRecurrent网络的python实现与解析
zh路西法2026/3/17

前言 Unitree RL GYM 是一个开源的 基于 Unitree 机器人强化学习(Reinforcement Learning, RL)控制示例项目,用于训练、测试和部署四足机器人控制策略。该仓库支持多种 Unitree 机器人型号,包括 Go2、H1、H1_2 和 G1。仓库地址 本系列将着手解析整个仓库的核心代码与算法实现和训练教程。此系列默认读者拥有一定的强化学习基础和代码基础,故在部分原理和基础代码逻辑不做解释,对强化学习基础感兴趣的读者可以阅读我的入门系列: 第一期

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读