Python 组合数据类型超详细教程(列表 + 元组 + 字典)
前言
在 Python 编程中,组合数据类型是处理批量数据的核心基础,它能把多个不同类型的数据打包在一起,灵活存储与操作。
第 4 章重点讲解三大组合类型:
- 列表 list:最常用、可修改
- 元组 tuple:不可修改、更安全
- 字典 dict:键值对、无序、查询快
本文逐点拆解,代码完整、注释详细、案例实战,帮你彻底吃透组合数据类型!
Python 列表类型(List)从入门到精通详解
本文将结合完整代码示例,系统讲解 Python 中列表(List)的核心知识点,包括列表的定义、元素获取、循环访问、常用函数与方法等,适合 Python 初学者快速掌握列表的核心用法。
1 列表类型的介绍
列表是 Python 中最常用的组合数据类型之一,它可以将多种不同类型的元素按顺序组合在一起,用方括号[]包裹,元素之间用英文逗号分隔。列表中的元素可以是数值、字符串、列表、元组、字典等任意数据类型,当列表中嵌套其他列表时,被嵌套的列表称为子列表。
示例代码:创建基础列表
python
# 定义一个包含数值和字符串的混合类型列表
ls = [1, 2, 'Python']
# 输出列表
print(ls)
plaintext
[1, 2, 'Python']
输出的内容与列表定义的内容、元素顺序完全一致。
2 获取列表元素
列表中的元素是有序的,支持通过索引和切片两种方式获取元素,与字符串的索引、切片原理基本一致,核心规则如下:
- 列表从左到右索引从 0 开始递增,索引为 0 表示第 1 个元素;
- 支持反向索引,从右到左索引从 - 1 开始递减,-1 表示最后一个元素;
- 索引获取的元素数据类型与原元素一致,切片获取的结果始终是一个新列表;
- 列表中的子列表本身也是一个元素,可通过多层索引获取子列表中的元素。
2.1 索引获取列表元素
python
# 定义变量a
a = '学习'
# 创建包含数值、字符串、子列表、变量的列表
ls = [12, '12', ['p', 't'], a]
# 获取索引为0、2和-3的元素
print(ls[0], ls[2], ls[-3])
plaintext
12 ['p', 't'] 12
ls[0]:获取列表第 1 个元素,即数值12;ls[2]:获取列表第 3 个元素,即子列表['p', 't'];ls[-3]:从列表尾部向前数第 3 个元素,即字符串'12'。
2.2 获取嵌套列表中的元素
当列表中包含子列表时,可通过列表名[外层索引][内层索引]的方式获取子列表中的元素。
python
# 定义包含多个子列表的列表
ls = ['t', ['t', 'f'], [12, 34, 7], 'Python']
# 分别获取不同层级的元素
print(ls[0][1], ls[1][1], ls[2][2], ls[3][4])
plaintext
t f 7 o
ls[0][1]:先获取索引为 0 的子列表't'(字符串),再取其索引为 1 的字符,即t;ls[1][1]:先获取索引为 1 的子列表['t', 'f'],再取其索引为 1 的元素,即'f';ls[2][2]:先获取索引为 2 的子列表[12,34,7],再取其索引为 2 的元素,即7;ls[3][4]:先获取索引为 3 的字符串'Python',再取其索引为 4 的字符,即'o'。
2.3 切片获取列表元素
切片的语法为列表名[起始索引:结束索引:步长],遵循 “左闭右开” 规则,即包含起始索引的元素,不包含结束索引的元素。
python
a = '学习'
ls = [12, '12', ['p', 't'], a]
# 获取索引0~2(不包含2)的元素,索引-3~-1(不包含-1)的元素
print(ls[0:2], ls[-3:-1])
plaintext
[12, '12'] ['12', ['p', 't']]
切片返回的结果始终是一个列表,因此输出结果外层带有方括号。
2.4 多层嵌套列表的索引方法
当列表包含多层嵌套时,可通过列表名[索引1][索引2][索引3]...的方式逐层获取最内层元素。
python
# 定义多层嵌套列表
ls = [12, ['le', [3, 4, 'hello'], 19], 'py']
# 获取多层嵌套的元素
print(ls[1][1][2])
plaintext
hello
执行步骤:
- 先获取
ls[1],即子列表['le', [3, 4, 'hello'], 19]; - 再获取
ls[1][1],即子列表[3, 4, 'hello']; - 最后获取
ls[1][1][2],即字符串'hello'。
3 循环访问列表的元素
Python 中的for循环可以直接遍历列表,每次循环会将列表中的一个元素依次赋值给循环变量,同时可通过len()函数获取列表的长度。
3.1 for 循环遍历列表
python
# 定义包含子列表和字符串的列表
ls = [['t', 'f'], [12, 34, 7], 'Python']
# 循环遍历列表中的每个元素
for i in ls:
print(i)
plaintext
['t', 'f']
[12, 34, 7]
Python
循环会依次输出列表中的每一个元素,包括子列表和字符串。
3.2 len () 函数获取列表长度
len()函数仅统计列表顶层的元素个数,不会递归统计子列表中的元素。
python
ls = [['t', 'f'], [12, 34, 7], 'Python']
# 获取列表的长度
print(len(ls))
plaintext
3
列表ls的顶层有 3 个元素,因此长度为 3。
4 列表类型的函数
Python 中可以使用list()函数将其他可迭代对象(如字符串)转换为列表,但数值类型无法直接转换为列表,会抛出TypeError异常。
示例代码:list () 函数的使用
python
# 定义字符串变量和数值变量
a = "你好,办公自动化"
b = 12
# 将字符串转换为列表
print(list(a))
# 尝试将数值转换为列表(会报错)
# print(list(b))
plaintext
['你', '好', ',', '办', '公', '自', '动', '化']
字符串转换为列表时,每个字符会被作为单独的元素存入列表;而数值是不可迭代对象,直接使用list(b)会报错TypeError: 'int' object is not iterable。
5 列表类型的常用方法
Python 为列表提供了丰富的内置方法,可通过dir(list)查看所有可用方法,以下是最常用的 10 种方法详解:
5.1 append (参数) 方法
功能:在列表的末尾添加一个新元素,直接修改原列表,无返回值。
python
# 定义列表
ls = ['奶茶', '大盘鸡']
# 在列表末尾添加元素
ls.append('冰淇淋')
# 输出修改后的列表
print(ls)
plaintext
['奶茶', '大盘鸡', '冰淇淋']
5.2 clear () 方法
功能:清空列表中的所有元素,使列表变为空列表,直接修改原列表,无返回值。
python
ls = ['奶茶', '大盘鸡']
# 清空列表
ls.clear()
print(ls)
plaintext
[]
5.3 copy () 方法
功能:复制一个新的列表(浅拷贝),原列表和新列表相互独立,修改其中一个不会影响另一个;而直接赋值的列表会共享内存空间,修改其中一个会影响另一个。
python
ls = ['奶茶', '大盘鸡']
# 使用copy()方法复制列表
ls_new1 = ls.copy()
# 直接赋值列表
ls_new2 = ls
# 清空原列表
ls.clear()
# 输出三个列表
print(ls, ls_new1, ls_new2)
plaintext
[] ['奶茶', '大盘鸡'] []
ls_new1是ls的副本,原列表清空后不受影响;ls_new2和ls共享内存,原列表清空后也变为空列表。
5.4 count (参数) 方法
功能:统计指定元素在列表中出现的次数。
python
ls = ['奶茶', '大盘鸡', '大盘鸡', '奶茶', '奶茶']
# 统计'奶茶'在列表中出现的次数
ls_count = ls.count('奶茶')
print(ls_count)
plaintext
3
5.5 index (参数) 方法
功能:获取指定元素在列表中第一次出现的索引位置,若元素不存在会抛出ValueError异常。
运行
ls = ['奶茶', '大盘鸡', '冰淇淋', '榴莲']
# 获取'冰淇淋'的索引
ls_index = ls.index('冰淇淋')
print(ls_index)
plaintext
2
如果列表中有多个相同元素,只会返回第一个元素的索引。
5.6 insert (参数 1, 参数 2) 方法
功能:在指定索引位置插入一个新元素,原索引位置及之后的元素会自动向后移动一位。
python
ls = ['奶茶', '大盘鸡', '冰淇淋', '榴莲']
# 在索引为2的位置插入'蛋糕'
ls.insert(2, '蛋糕')
print(ls)
plaintext
['奶茶', '大盘鸡', '蛋糕', '冰淇淋', '榴莲']
5.7 pop (参数) 方法
功能:删除指定索引位置的元素,并返回被删除的元素;若不指定索引,默认删除列表最后一个元素。
python
ls = ['奶茶', '大盘鸡', '冰淇淋', '榴莲']
# 删除索引为2的元素,并接收被删除的元素
ls_pop = ls.pop(2)
# 输出被删除的元素和修改后的列表
print(ls_pop, ls)
plaintext
冰淇淋 ['奶茶', '大盘鸡', '榴莲']
5.8 remove (参数) 方法
功能:删除列表中第一次出现的指定元素,无返回值;若元素不存在会抛出ValueError异常。
python
ls = ['奶茶', '大盘鸡', '冰淇淋', '榴莲']
# 删除列表中第一次出现的'大盘鸡'
ls_remove = ls.remove('大盘鸡')
print(ls_remove, ls)
plaintext
None ['奶茶', '冰淇淋', '榴莲']
remove()方法执行后无返回值,因此ls_remove的值为None。
5.9 reverse () 方法
功能:将列表中的元素顺序反转,直接修改原列表,无返回值。
python
ls = ['奶茶', '大盘鸡', '冰淇淋', '榴莲']
# 反转列表
ls_reverse = ls.reverse()
print(ls_reverse, ls)
plaintext
None ['榴莲', '冰淇淋', '大盘鸡', '奶茶']
5.10 sort (参数) 方法(重要)
功能:对列表中的元素进行排序,直接修改原列表,无返回值。
- 默认按升序排序,可通过
reverse=True参数实现降序排序; - 数字按数值大小排序,字符串按 Unicode 编码顺序排序(汉字按拼音顺序排序)。
python
# 定义包含汉字的列表和数字列表
ls_1 = ['奶茶', '大盘鸡', '冰淇淋', '榴莲']
ls_2 = [3, 2, 6, 7, 3, 1]
# 对ls_1进行升序排序(默认)
ls_sort_1 = ls_1.sort()
# 对ls_2进行降序排序
ls_2.sort(reverse=True)
# 输出结果
print(ls_sort_1, ls_1, ls_2)
plaintext
None ['冰淇淋', '大盘鸡', '奶茶', '榴莲'] [7, 6, 3, 3, 2, 1]
sort()方法直接修改原列表,因此ls_sort_1的值为None。
Python 元组类型详解:不可变序列的特性与使用
1 元组的基本概念
在 Python 中,元组(tuple)是一种与列表相似的序列数据类型,它和列表的核心区别在于:元组是不可变的,一旦创建就不能对其中的元素进行删除、添加、修改、反转等操作。
元组的创建方式非常简单,只要把元素用圆括号 () 括起来即可,其通用形式如下:
python
(元素1, 元素2, 元素3, ...)
元组中的每个元素可以是不同的数据类型,例如整数、字符串、列表,甚至是另一个元组,这为数据存储提供了很高的灵活性。
2 元组的核心特性:不可修改性
元组最关键的特性是不支持元素的修改操作,这也导致元组中可用的函数和方法远少于列表。
2.1 尝试修改元组的后果
如果我们尝试对元组执行修改操作(比如用索引赋值),Python 会直接抛出 TypeError 错误,提示元组不支持元素赋值。
python
# 定义一个元组
tp = ('冰淇淋', '大盘鸡', '奶茶', '榴莲')
# 尝试修改元组中的元素
tp[0] = '火锅'
运行代码会报错:
plaintext
TypeError: 'tuple' object does not support item assignment
这就是元组 “不可变” 特性的直接体现,也是它和列表最本质的区别。
2.2 删除元组的正确方式
虽然我们不能修改元组中的单个元素,但可以使用 del 关键字删除整个元组对象。
示例代码:
python
# 第1行:创建一个元组并赋值给变量tp
tp = ('冰淇淋', '大盘鸡', '奶茶', '榴莲')
# 第2行:删除元组对象tp
del tp
# 第3行:尝试打印已经被删除的元组
print(tp)
运行结果会抛出错误:
plaintext
Traceback (most recent call last):
File "E:/书代码/第4章/第6个程序.py", line 3, in <module>
print(tp)
NameError: name 'tp' is not defined
这个报错提示我们,tp 这个变量名已经没有对应的定义了。这是因为 del 关键字会直接从计算机内存中清除元组对象,以及它和变量名的绑定关系,所以后续再访问 tp 就会报错。
3 元组的创建方式
除了直接用圆括号定义,Python 还提供了 tuple() 函数来创建元组,这种方式尤其适合创建空元组,或者将其他数据类型(比如字符串、列表)转换为元组。
示例代码:
python
# 第1行:创建一个空元组
a = tuple()
# 第2行:将字符串"Python"转换为元组
b = tuple('Python')
# 第3行:打印两个元组
print(a, b)
plaintext
() ('P', 'y', 't', 'h', 'o', 'n')
a = tuple()创建了一个空元组()。b = tuple('Python')将字符串'Python'按字符拆分,转换为了每个字符为一个元素的元组('P', 'y', 't', 'h', 'o', 'n')。
4 元组的应用场景
元组的 “不可变” 特性让它在一些场景中非常有用:
- 数据安全性高:一旦创建就不能被随意修改,适合存储不希望被意外改动的数据,比如配置信息、常量数据。
- 作为字典的键:字典的键必须是不可变类型,元组可以作为字典的键,而列表则不行。
- 函数返回多个值:Python 中函数返回多个值时,本质上就是返回一个元组。
存储,查询最快
字典是无序、键值对、可修改类型,用花括号 {} 表示。
Python 字典类型详解:从基础到投票统计实战
1 字典的基本概念
在 Python 中,字典(dict)是一种由 ** 键值对(key-value)** 组成的可变序列数据类型,和列表、元组不同,它不支持索引访问,而是通过唯一的键(key)来访问对应的值(value)。
字典的通用形式如下:
python
{键1: 值1, 键2: 值2, 键3: 值3, ...}
- 键(key):必须是不可变且唯一的数据类型,如字符串、数字、元组,不能是列表或字典(无法保证唯一性)。
- 值(value):可以是任意数据类型,如数字、字符串、列表、字典等,且值可以重复。
示例代码:
python
# 创建一个存储学生信息的字典
d = {202101:'张三', 202102:'李四', 202103:'王五'}
# 输出字典内容、长度和类型
print(d, len(d), type(d))
plaintext
{202101: '张三', 202102: '李四', 202103: '王五'} 3 <class 'dict'>
2 字典的创建与基础操作
2.1 创建字典的两种方式
- 直接定义:使用花括号
{}直接创建键值对。python
# 直接创建字典 student = {"name": "张三", "age": 18, "grade": "高三"} - 使用
dict()函数:创建空字典,或把其他可迭代对象转换为字典。python
# 创建空字典 a = dict() # 给空字典添加键值对 a[202104] = "赵六" print(a)plaintext
{202104: '赵六'}
2.2 向字典中添加 / 修改数据
字典支持直接通过键赋值的方式添加或修改数据:
python
# 空字典
info = {}
# 添加键值对
info["school"] = "清华大学"
info["major"] = "计算机科学"
# 修改已存在的键的值
info["major"] = "人工智能"
print(info)
plaintext
{'school': '清华大学', 'major': '人工智能'}
注意:如果键不存在,赋值操作会添加新的键值对;如果键已存在,会直接覆盖原来的值。
3 获取字典元素
字典不支持索引或切片访问,只能通过键来获取对应的值,有两种常用方式:
3.1 直接通过键获取
python
d = {202101:'张三', 202102:'李四', 202103:'王五'}
# 通过键获取值
print(d[202102])
plaintext
李四
⚠️ 注意:如果访问不存在的键,会直接抛出 KeyError 错误,例如 print(d[202104]) 会报错。
3.2 使用 get() 方法安全获取
get(参数1, 参数2) 方法可以安全地获取字典中的值,避免 KeyError:
- 如果键存在,返回对应的值;
- 如果键不存在,返回
None(默认)或你指定的参数 2。
示例代码:
python
d = {202101:'张三', 202102:'李四', 202103:'王五'}
print(d.get(202102)) # 键存在,返回对应值
print(d.get(202104)) # 键不存在,返回None
print(d.get(202104, '查询不到!')) # 键不存在,返回指定的默认值
plaintext
李四
None
查询不到!
4 字典的常用方法
Python 为字典提供了多种内置方法,以下是最常用的几种:
表格
| 方法 | 功能说明 | 示例代码 |
|---|---|---|
clear() |
清空字典中的所有元素,变为空字典 | d.clear() |
keys() |
获取字典中所有的键,返回 dict_keys 类型 |
print(d.keys()) |
values() |
获取字典中所有的值,返回 dict_values 类型 |
print(d.values()) |
items() |
获取字典中所有的键值对,返回 dict_items 类型 |
print(d.items()) |
pop(键) |
删除指定键对应的键值对,并返回被删除的值 | a = d.pop(202102) |
4.1 keys()、values()、items() 方法详解
这三个方法返回的都是 Python 内部的特殊数据类型,需要用 list() 函数转换为列表才能直接使用:
python
d = {202101:'张三', 202102:'李四', 202103:'王五'}
# 获取所有键并转为列表
print(list(d.keys()))
# 获取所有值并转为列表
print(list(d.values()))
# 获取所有键值对并转为列表
print(list(d.items()))
运行结果:
plaintext
[202101, 202102, 202103]
['张三', '李四', '王五']
[(202101, '张三'), (202102, '李四'), (202103, '王五')]
4.2 pop() 方法示例
python
d = {202101:'张三', 202102:'李四', 202103:'王五'}
# 删除键为202102的键值对,并将被删除的值赋值给变量a
a = d.pop(202102)
print(d, a)
plaintext
{202101: '张三', 202103: '王五'} 李四
5 字典的遍历
使用 for 循环可以遍历字典,根据需求可以选择不同的遍历方式:
5.1 遍历所有键
python
d = {202101:'张三', 202102:'李四', 202103:'王五'}
for key in d:
print(key)
plaintext
202101
202102
202103
5.2 同时遍历键和值
python
d = {202101:'张三', 202102:'李四', 202103:'王五'}
for key, value in d.items():
print(key, value)
plaintext
202101 张三
202102 李四
202103 王五
6 数据的维度:列表与字典的应用场景
在 Python 中,我们可以用列表和字典表示不同维度的数据:
- 一维数据:一行数据,用列表表示,如
[34, 67, 89]。 - 二维数据:表格形式的数据,用嵌套列表表示,每个子列表对应一行数据。
python
# 二维数据示例(类似表格) table = [ ['日期', '芯片', '手机', '智能设备'], ['1日', 4556.448898, 1412.691145, 1070.940706], ['2日', 5857.880571, 1103.11709, 742.1934921] ] # 获取表格第2行第3列的数据 print(table[1][2]) # 输出: 1412.691145 - 高维数据:包含多个二维表格的数据(如多个工作表的 Excel 文件),用字典表示,键对应工作表名称,值对应二维数据列表。
7 实战项目:自动统计班长候选人票数
7.1 固定投票数据统计
实现一个程序,统计班级投票中每位候选人的得票总数。
python
# 1. 创建空字典,用于存储候选人票数
D = dict()
# 2. 模拟所有学生的投票信息
ls = ['王五', '张三', '李四', '李四', '李四', '朱七', '李四', '王五', '张三', '张三']
# 3. 遍历投票列表,统计票数
for vote in ls:
# 若候选人不在字典中,默认票数为0,再+1;若已存在,直接在原票数+1
D[vote] = D.get(vote, 0) + 1
# 4. 输出统计结果
print(D)
plaintext
{'王五': 2, '张三': 3, '李四': 4, '朱七': 1}
可以看到,李四的票数最高,当选班长。
7.2 模拟学生实时投票
在上面的基础上,实现一个支持学生输入投票的程序,输入结束停止投票并统计结果:
python
# 1. 创建空列表,存储学生的投票信息
ls = []
# 2. 循环接收投票输入
while True:
name = input('请输入您要投票的内容: ')
if name != '结束':
ls.append(name)
else:
break
# 3. 创建空字典统计票数
D = dict()
for vote in ls:
D[vote] = D.get(vote, 0) + 1
# 4. 输出统计结果
print(D)
plaintext
请输入您要投票的内容: 王五
请输入您要投票的内容: 张三
请输入您要投票的内容: 张三
请输入您要投票的内容: 李四
请输入您要投票的内容: 结束
{'王五': 1, '张三': 2, '李四': 1}
本章总结
表格
| 类型 | 符号 | 是否可修改 | 有序 | 适用场景 |
|---|---|---|---|---|
| 列表 list | [] | 可修改 | 有序 | 批量数据、增删频繁 |
| 元组 tuple | () | 不可修改 | 有序 | 固定配置、安全数据 |
| 字典 dict | {} | 可修改 | 无序 | 键值查询、高维数据 |
本章是 Python 数据处理的基石,务必熟练掌握:索引、切片、遍历、常用方法!
更多推荐


所有评论(0)