数据结构 · 10 道样题

Python 元组练习题与答案

元组看起来像带括号的列表,但这些差别会影响你如何解包数据、保护值,以及构造字典键。这些题目覆盖初学者在真实代码里最常遇到的细节。

39 道题在完整题库中 · 13 道选择 · 13 道填空 · 13 道输出

这个主题考什么

  • 正确打包和解包,包括单元素元组的逗号。
  • 预测代码尝试修改元组时会发生什么。
  • 在需要固定形状或可哈希键时使用元组。

常见错误

  • 需要单元素元组时写成 (1)。真正的单元素元组是 (1,),逗号不能少。
  • 尝试给 tuple[index] 赋值。元组不支持元素赋值。
  • 以为元组总是更快或总是更好;应根据数据是否需要变化来选择。
样题

样题

10

从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。

  1. 选择题q0516

    1. 小明用元组存奶茶配方比例(糖:水:奶 = 1:5:3),元组和列表最大的区别是?

    1. 元组有序,列表无序
    2. 元组不可变,列表可变
    3. 元组只能存数字
    4. 列表更快
    显示答案

    答案

    B. 元组不可变,列表可变

    解析: 元组有序且不可变,列表有序但可变。两者都有序,真正的区别在可变性:需要修改内容就选列表。元组还能当字典的键,列表不行。

  2. 选择题q0527

    2. 🧋 小明用元组存奶茶配方比例(不可改),元组不可变意味着?

    1. 不能重新赋值变量
    2. 不能修改元组内的元素
    3. 元组不能被引用
    4. 元组只能存数字
    显示答案

    答案

    B. 不能修改元组内的元素

    解析: 不可变指的是内容不能原地修改,名字仍可重新绑定。元组的身份和长度都固定,所以能安全共享。所以元组适合放坐标、比例这类固定组合。

  3. 选择题q0530

    3. 🧋 小明存单杯奶茶的规格,(42,) 的类型是?

    1. tuple
    2. int
    3. str
    4. list
    显示答案

    答案

    A. tuple

    解析: 42 后面的逗号让它成为单元素元组,type() 因此是 tuple。这是最小的合法元组,长度只有 1。

  4. 选择题q0541

    4. 哪个方法统计某个值在元组里出现的次数?

    1. count
    2. index
    3. find
    4. len
    显示答案

    答案

    A. count

    解析: count(value) 在元组上可用,返回相等元素的个数。index 给的是位置,find 属于字符串,len 数的是全部元素。

  5. 填空题q0518

    5. 小明把奶茶信息 (名称, 价格) = ("奶茶", 15) 拆到两个变量里,这利用了元组 ___ 机制

    显示答案

    答案

    解包

    解析: 右边把两个值打包,左边按位置逐个取出,这叫元组解包。名字个数必须与元素个数一致,否则抛 ValueError。

  6. 填空题q0534

    6. 🧋 小明解包奶茶的(名称,价格,杯型),交换变量:a, b = ___ 实现互换

    显示答案

    答案

    b, a

    解析: 先算右边得到元组 (b, a),再解包回 a 和 b,不用临时变量就完成了交换。右边先于左边求值。右边先建好元组再解包,所以没有中间变量也不会丢值。

  7. 填空题q0546

    7. 带字段名的轻量元组,常用哪个标准库工厂?

    from collections import ____
    Point = namedtuple('Point', ['x', 'y'])
    显示答案

    答案

    namedtuple

    解析: namedtuple 生成元组的子类,字段还能按名字读取,point.x 与 point[0] 都可用。它仍是元组,因此不可变。

  8. 输出预测q0517

    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. 输出预测q0525

    9. 看代码,写出运行结果。

    for i, ch in enumerate("ab"):
        print(i, ch)
    显示答案

    答案

    0 a
    1 b

    解析: enumerate 产出 (下标, 字符) 对,print 用空格分隔,所以先打印 0 a 再打印 1 b。下标从 0 开始。

  10. 输出预测q0538

    10. 读取内层元组的第一个元素。打印什么?

    t = (1, (2, 3))
    print(t[1][0])
    显示答案

    答案

    2

    解析: t[1] 返回内层元组 (2, 3),再取 [0] 得到第一个元素,打印 2;链式下标一次走一层,别想一步到位。

常见问题

为什么单元素元组需要逗号?

括号只是分组,逗号才创建元组。(1) 是整数 1,而 (1,) 是元组。

元组里可以放列表吗?

可以。元组本身不能重新赋值,但里面的可变对象仍然可以变化。

继续保持练习节奏。

完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。

打开完整练习