Python容器的类型(Tuple)
·
📚 Python 元组(Tuple)完整笔记
元组(tuple)是 Python 中一种 不可变的有序序列,常用于存储固定不变的数据。
一、元组的定义
✅ 基本语法
# 多个元素
t1 = (1, 2, 3)
# 空元组(两种写法)
t2 = ()
t3 = tuple()
# 单个元素(必须加逗号!)
t4 = ("4",) # ✅ 正确:tuple
t5 = ("4") # ❌ 错误:这是字符串 str!
⚠️ 关键细节:
定义只有一个元素的元组时,必须在元素后加逗号,否则 Python 会将其视为普通括号表达式。
二、元组的特性
| 特性 | 说明 |
|---|---|
| 有序 | 元素按插入顺序存储,可通过下标访问 |
| 不可变(Immutable) | 一旦创建,不能增删改元组本身的元素 |
| 允许重复元素 | 如 (1, 1, 2) 是合法的 |
| 可嵌套 | 元组中可以包含其他元组、列表、字典等 |
| 支持索引和切片 | 如 t[0], t[1:3] |
💡 重要理解:
“不可变”指的是元组的结构(即元素引用)不能变,但如果元素是可变对象(如 list),其内容仍可修改。
t = (1, 2, ["a", "b"])
t[2].append("c") # ✅ 合法!修改的是内部 list
print(t) # (1, 2, ['a', 'b', 'c'])
# t[0] = 10 # ❌ 报错!不能修改元组元素
# t.append(4) # ❌ 报错!元组无 append 方法
三、元组的常用操作
1. 索引与切片
t = (10, 20, 30, 40)
print(t[0]) # 10
print(t[-1]) # 40
print(t[1:3]) # (20, 30)
2. 嵌套元组访问
t5 = ((1, 2, 3), (4, 5, 6))
print(t5[1][2]) # 6
3. 查找元素下标:index()
t6 = (1, 2, 3)
print(t6.index(3)) # 2
# 如果元素不存在,会抛出 ValueError
4. 统计元素个数:count()
t7 = (1, 2, 2, 2, 3, 3, 3, 3)
print(t7.count(3)) # 4
5. 获取长度:len()
t8 = (1, 2, 2, 3)
print(len(t8)) # 4
四、元组的遍历
✅ 使用 while 循环
t9 = (1, 2, 3)
index = 0
while index < len(t9):
print(f"元素: {t9[index]}")
index += 1
✅ 使用 for 循环(推荐)
t10 = (4, 5, 6)
for element in t10:
print(f"元素: {element}")
📌 建议:优先使用
for循环,代码更简洁、安全。
五、元组 vs 列表(List)
| 特性 | 元组(tuple) | 列表(list) |
|---|---|---|
| 可变性 | ❌ 不可变 | ✅ 可变 |
| 语法 | (1, 2, 3) | [1, 2, 3] |
| 性能 | ⚡ 更快(内存更紧凑) | 稍慢 |
| 用途 | 存储固定数据(如坐标、配置) | 存储动态数据 |
| 方法 | 少(只有 index, count) | 多(append, remove, sort 等) |
| 作为字典键 | ✅ 可以(因为不可变) | ❌ 不可以 |
✅ 使用场景建议:
- 用元组:坐标
(x, y)、数据库记录、函数返回多个值- 用列表:需要增删改的数据集合
六、元组的高级用法(拓展)
1. 元组解包(Unpacking)
point = (3, 4)
x, y = point
print(x, y) # 3 4
# 交换变量(无需临时变量)
a, b = 1, 2
a, b = b, a
print(a, b) # 2 1
2. 函数返回多个值(实际返回元组)
def get_name_age():
return "Alice", 25 # 实际返回 ("Alice", 25)
name, age = get_name_age()
3. 作为字典的键
locations = {
(0, 0): "原点",
(1, 1): "东北角"
}
print(locations[(0, 0)]) # 原点
4. 命名元组(collections.namedtuple)——进阶
from collections import namedtuple
Person = namedtuple('Person', ['name', 'age'])
p = Person("Bob", 30)
print(p.name) # Bob(像对象一样访问)
七、练习题解析(你的代码)
my_tuple = ("周杰伦", 11, ["football", "music"])
# 1. 查询年龄下标
age_index = my_tuple.index(11) # 1
# 2. 查询姓名
name = my_tuple[0] # "周杰伦"
# 3. 删除爱好中的 "football"
del my_tuple[2][0] # 修改内部 list
# 4. 增加爱好 "coding"
my_tuple[2].append("coding") # ✅ 正确!
print(my_tuple)
# 输出: ('周杰伦', 11, ['music', 'coding'])
✅ 关键点:虽然元组不可变,但其内部的 list 是可变的,所以可以修改 list 的内容。
八、常见错误总结
| 错误写法 | 正确写法 | 原因 |
|---|---|---|
t = (1) | t = (1,) | 单元素元组必须加逗号 |
t.append(2) | t = t + (2,) | 元组无 append,但可拼接 |
t[0] = 10 | 不允许 | 元组元素不可修改 |
t.index(999) | 先判断是否存在 | 元素不存在会报 ValueError |
✅ 总结口诀
“元组圆括号,逗号不能落;
单元加逗号,否则变字符串。
本身不可变,内嵌 list 可改;
查找用 index,统计用 count。
遍历 for 最好,解包很巧妙;
固定数据用 tuple,灵活变动用 list!”
✅ 掌握这些,你就完全理解 Python 元组了!
更多推荐
所有评论(0)