🔒 07. 元组 tuple 详解
本章概述
学习 Python 元组的定义、特点和使用场景。 预计学习时间:30 分钟
7.1 元组定义
元组是有序、不可变的容器,类似只读列表。
# 空元组
t = ()
t = tuple()
# 有元素的元组
t = (1, 2, 3)
t = ("a", "b", "c")
# 单个元素的元组(注意逗号!)
t = (1,) # ✅ 是元组
t = (1) # ❌ 不是元组,就是整数1单个元素的元组
只有一个元素时,后面必须加逗号,否则括号会被当作运算符。
7.2 元组的特点
| 特点 | 说明 |
|---|---|
| 不可变 | 不能增删改元素 |
| 有序 | 有索引,可以切片 |
| 可重复 | 元素可以重复 |
| 混合类型 | 元素类型可以不同 |
| 速度快 | 比列表访问速度快 |
| 可当字典key | 不可变对象可以当字典的key |
为什么要有元组?
- 保护数据:不希望被修改的数据用元组
- 性能更好:元组比列表更快、占内存更少
- 字典key:元组可以当字典的key,列表不行
- 函数返回值:函数返回多个值时,默认是元组
7.3 元组支持的操作
t = (1, 2, 3, 4, 5)
# 索引和切片(和列表一样)
t[0] # 1
t[1:4] # (2, 3, 4)
# 拼接、重复
t + (6, 7) # (1, 2, 3, 4, 5, 6, 7)
t * 2 # (1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
# 成员判断
3 in t # True
# 长度
len(t) # 5
# 统计、查找
t.count(2) # 1
t.index(3) # 2
# 遍历
for item in t:
print(item)元组的方法很少
因为不可变,所以没有 append、pop、remove、sort 等修改方法。 只有
count()和index()两个方法。
7.4 元组的不可变性
理解不可变
元组的「不可变」指的是元组本身的元素引用不可变。 如果元素本身是可变对象(如列表),那个对象的内容是可以变的。
t = (1, 2, [3, 4])
# t[0] = 10 # ❌ 报错,元组元素不能改
# 但如果元素本身是可变对象(如列表),可以修改那个对象的内容
t[2].append(5)
print(t) # (1, 2, [3, 4, 5])
# 注意:元组存的是列表的引用,引用没变,列表本身变了7.5 元组解包
Python 特色
元组解包是非常实用的语法!
# 多变量赋值
a, b, c = (1, 2, 3)
print(a, b, c) # 1 2 3
# 交换两个变量(Python特有,不用临时变量)
a, b = b, a
# 用*号收集多余元素
first, *rest = (1, 2, 3, 4, 5)
print(first) # 1
print(rest) # [2, 3, 4, 5]
*rest, last = (1, 2, 3, 4, 5)
print(rest) # [1, 2, 3, 4]
print(last) # 5
first, *middle, last = (1, 2, 3, 4, 5)
print(first) # 1
print(middle) # [2, 3, 4]
print(last) # 5解包的应用
- 交换变量:
a, b = b, a- 函数返回多个值
- 遍历字典的 items()
- 拆分数据
7.6 元组和列表的区别
| 特性 | 列表 list | 元组 tuple |
|---|---|---|
| 可变性 | 可变(增删改) | 不可变 |
| 语法 | [] | () |
| 速度 | 较慢 | 较快 |
| 内存 | 占用多 | 占用少 |
| 能否当字典key | 不能 | 能 |
| 方法数量 | 多(11个) | 少(2个) |
| 推导式 | 列表推导式 | 没有元组推导式(是生成器) |
什么时候用元组?
- ✅ 数据不应该被修改时(保护数据)
- ✅ 需要作为字典的key时
- ✅ 函数返回多个值时(默认返回元组)
- ✅ 作为配置参数等固定数据时
什么时候用列表?
- ✅ 数据需要经常变化时
- ✅ 需要增删改操作时
- ✅ 需要排序、反转等操作时
7.7 元组和列表的转换
# 列表转元组
lst = [1, 2, 3]
t = tuple(lst) # (1, 2, 3)
# 元组转列表
t = (1, 2, 3)
lst = list(t) # [1, 2, 3]小技巧
想「修改」元组怎么办?
- 转成列表,修改后再转回元组
- 或者直接创建新的元组
🔗 相关章节
📝 我的笔记
在这里记录你的理解、疑问和练习代码
# 你的练习代码
✅ 本章检查清单
- 掌握元组的定义和特点
- 理解元组的不可变性
- 会使用元组解包
- 知道元组和列表的区别
- 了解什么时候用元组,什么时候用列表
- 会进行元组和列表的转换