# 元组

# 选择题

# 1. 题目

以下哪个是错误定义元组的方式( )
A.x=(9,)
B.x=(1)
C.x=()
D.x=(1,2,3)

答案:B

选项 Ax=(9,) → 正确。这是单元素元组的正确定义方式,必须在元素后面添加逗号。

选项 Bx=(1) → 错误。这里的圆括号仅起到优先级包裹的作用, (1) 本质上就是整数 1,不是元组。

选项 Cx=() → 正确。这是空元组的标准定义方式。

选项 Dx=(1,2,3) → 正确。这是多元素元组的正确定义方式。


# 2. 题目

对于元组t = (1,2,3,4),以下哪个操作会报错 ( D )
A.len(t)
B.max(t)
C.min(t)
D.tuple[2] = 5

答案:D

选项 Alen(t) → 正确。 len() 函数可以获取元组的长度。

选项 Bmax(t) → 正确。 max() 函数可以获取元组中的最大值。

选项 Cmin(t) → 正确。 min() 函数可以获取元组中的最小值。

选项 Dtuple[2] = 5 → 错误。首先, tuple 是元组的类型名,不是变量名;其次,元组是不可变的,不支持元素赋值操作。


# 3. 题目

(1, )*2(1)*2输出为多少( )
A.(2,), 2
B.(1,1), 2
C.(2,), (1,1)
D.(1,1), (1,1)

答案:B

选项 A:(2,), 2 → 错误。(1,)*2 的结果是 (1,1),不是 (2,)。

选项 B:(1,1), 2 → 正确。(1,)*2 是元组的重复操作,结果为 (1,1);(1)*2 是整数 1 乘以 2,结果为 2。

选项 C:(2,), (1,1) → 错误。(1)*2 的结果是 2,不是 (1,1)。

选项 D:(1,1), (1,1) → 错误。(1)*2 的结果是 2,不是 (1,1)。


# 4. 题目

语句x = 3==3, 5执行结束后,变量x的值为_____________。
A.运行出错
B.True
C.(True, 5
D.5

答案:C

选项 A:运行出错 → 错误。该语句可以正常执行。

选项 B:True → 错误。x 的值是一个元组,不是单个布尔值。

选项 C:(True, 5)→ 正确。先执行 3==3 得到 True,然后逗号的作用是隐式打包为元组,所以 x 的值为 (True, 5)。

选项 D:5 → 错误。x 的值是一个元组,不是单个整数。


# 5. 题目

t = (1,2,3) t.append((4,5,6)) print(t)输出是什么( )
A.(1,2,3, (4,5,6))
B.报错
C.(1,2,3),(4,5,6)
D.(1,2,3,4,5,6)

答案:B

选项 A:(1,2,3, (4,5,6)) → 错误。元组没有 append () 方法,无法调用该方法。

选项 B:报错 → 正确。元组是不可变对象,没有 append () 方法,调用该方法会抛出 AttributeError。

选项 C:(1,2,3),(4,5,6) → 错误。元组没有 append () 方法,无法得到这个结果。

选项 D:(1,2,3,4,5,6) → 错误。元组没有 append () 方法,无法得到这个结果。


# 判断题

# 1. 题目

python中列表.元组都属于有序序列.   (    )

答案:对

解析:在 Python 中,列表和元组都属于有序序列,元素的存储顺序严格遵循定义时的插入顺序,可以通过整数索引精准访问元素。


# 2. 题目

对于生成器对象x = (3 for i in range(5)),执行list(x)的结果是[3, 3, 3, 3, 3],接着再执行set(x)的结果是{3}(     )

答案:错

解析:执行 list(x) 后,生成器 x 已经被完全耗尽,内部不再有可迭代的元素。因此,执行 set(x) 的结果是空集合,而非 {3}。


# 3. 题目

元组不可以进行修改,为不可变序列.  (    )

答案:对

解析:元组是不可变序列,一旦创建,其内部元素的指向就无法修改,不支持元素的赋值、新增、删除操作。


# 4. 题目

元组可以包含任意类型元素.  (    )

答案:对

解析:元组可以包含任意类型的元素,包括数字、字符串、列表、字典等,甚至可以包含其他元组。


# 5. 题目

语句 x,y = y,x 可以完成变量x,y中数据的交换.    (   )

答案:对

解析:这是 Python 中交换变量值的常用方法。执行该语句时,Python 会先将右侧的 y 和 x 打包成一个元组,然后将其解包并赋值给左侧的 x 和 y。


# 6. 题目

元组不能进行切片操作.    (   )

答案:错

解析:元组支持切片操作。切片操作返回一个新的元组,包含原元组中指定范围的元素,不会修改原元组(符合元组的不可变性)。


# 7. 题目

元组的访问速度比列表更块,如果不修改元素的话,建议使元组而非列表.    (   )

答案:对

解析:由于元组的不可变性,Python 可以为其分配固定大小的内存空间,访问时无需额外处理动态信息,因此访问速度比列表更快。


# 8. 题目

表达式(i**2 for i in range(100))的结果是个元组。    (   )

答案:错

解析:该表达式是生成器表达式,执行后返回的是一个生成器对象,而非元组。生成器表达式的圆括号是生成器的语法标识,而非元组的标识。


# 9. 题目

已知seq为长度大于10的列表,并且已导入random模块,那么[random.choice(seq) for i in range(10)]和random.sample(seq,10)等价。    (    )

答案:错

解析random.choice(seq) 是有放回抽样,允许重复元素; random.sample(seq,10) 是无放回抽样,不允许重复元素。因此,这两个表达式不等价。


# 10. 题目

已知x和y是两个字符串,那么表达式sum((1 for i,j in zip(x,y) if i==j))可以用来计算两个字符串中对应位置字符相等的个数。    (    )

答案:对

解析:该表达式的逻辑是:遍历两个字符串的对应位置字符,每发现一对相等的字符就生成一个 1,最后对这些 1 求和,得到的就是对应位置字符相等的总个数。


# 填空题

# 1. 题目

执行代码 x, y, z = sorted([1, 3, 2]) 之后,变量y的值为________

答案:2

解析sorted([1, 3, 2]) 返回排序后的列表 [1, 2, 3],然后通过序列解包将这三个元素分别赋值给 x、y、z,因此 y 的值为 2。


# 2. 题目

执行语句 x,y,z = map(str, range(3)) 之后,变量y的值为______

答案:'1'

解析range(3) 生成 0、1、2, map(str, range(3)) 将这三个整数转换为字符串 '0'、'1'、'2',然后通过序列解包将这三个字符串分别赋值给 x、y、z,因此 y 的值为 '1'。