这个主题考什么
- 正确打包和解包,包括单元素元组的逗号。
- 预测代码尝试修改元组时会发生什么。
- 在需要固定形状或可哈希键时使用元组。
常见错误
- 需要单元素元组时写成 (1)。真正的单元素元组是 (1,),逗号不能少。
- 尝试给 tuple[index] 赋值。元组不支持元素赋值。
- 以为元组总是更快或总是更好;应根据数据是否需要变化来选择。
样题
从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。
-
1. 小明用元组存奶茶配方比例(糖:水:奶 = 1:5:3),元组和列表最大的区别是?
显示答案
答案
B. 元组不可变,列表可变解析: 元组有序且不可变,列表有序但可变。两者都有序,真正的区别在可变性:需要修改内容就选列表。元组还能当字典的键,列表不行。
-
2. 🧋 小明用元组存奶茶配方比例(不可改),元组不可变意味着?
显示答案
答案
B. 不能修改元组内的元素解析: 不可变指的是内容不能原地修改,名字仍可重新绑定。元组的身份和长度都固定,所以能安全共享。所以元组适合放坐标、比例这类固定组合。
-
3. 🧋 小明存单杯奶茶的规格,(42,) 的类型是?
显示答案
答案
A. tuple解析: 42 后面的逗号让它成为单元素元组,type() 因此是 tuple。这是最小的合法元组,长度只有 1。
-
4. 哪个方法统计某个值在元组里出现的次数?
显示答案
答案
A. count解析: count(value) 在元组上可用,返回相等元素的个数。index 给的是位置,find 属于字符串,len 数的是全部元素。
-
5. 小明把奶茶信息 (名称, 价格) = ("奶茶", 15) 拆到两个变量里,这利用了元组 ___ 机制
显示答案
答案
解包解析: 右边把两个值打包,左边按位置逐个取出,这叫元组解包。名字个数必须与元素个数一致,否则抛 ValueError。
-
6. 🧋 小明解包奶茶的(名称,价格,杯型),交换变量:a, b = ___ 实现互换
显示答案
答案
b, a解析: 先算右边得到元组 (b, a),再解包回 a 和 b,不用临时变量就完成了交换。右边先于左边求值。右边先建好元组再解包,所以没有中间变量也不会丢值。
-
7. 带字段名的轻量元组,常用哪个标准库工厂?
from collections import ____ Point = namedtuple('Point', ['x', 'y'])显示答案
答案
namedtuple解析: namedtuple 生成元组的子类,字段还能按名字读取,point.x 与 point[0] 都可用。它仍是元组,因此不可变。
-
8. 解包 + 元组相加,输出什么?
t = (1, 2, 3) a, b, c = t print(b, t + (4,))显示答案
答案
2 (1, 2, 3, 4)解析: 解包按顺序把 1、2、3 绑给 a、b、c,所以 b 是 2。加 (4,) 返回新元组 (1, 2, 3, 4),t 本身不变。
-
9. 看代码,写出运行结果。
for i, ch in enumerate("ab"): print(i, ch)显示答案
答案
0 a 1 b
解析: enumerate 产出 (下标, 字符) 对,print 用空格分隔,所以先打印 0 a 再打印 1 b。下标从 0 开始。
-
10. 读取内层元组的第一个元素。打印什么?
t = (1, (2, 3)) print(t[1][0])显示答案
答案
2解析: t[1] 返回内层元组 (2, 3),再取 [0] 得到第一个元素,打印 2;链式下标一次走一层,别想一步到位。
常见问题
为什么单元素元组需要逗号?
括号只是分组,逗号才创建元组。(1) 是整数 1,而 (1,) 是元组。
元组里可以放列表吗?
可以。元组本身不能重新赋值,但里面的可变对象仍然可以变化。
继续保持练习节奏。
完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。