# 元组
# 选择题
# 1. 题目
以下哪个是错误定义元组的方式( ) | |
A.x=(9,) | |
B.x=(1) | |
C.x=() | |
D.x=(1,2,3) |
答案:B
选项 A: x=(9,) → 正确。这是单元素元组的正确定义方式,必须在元素后面添加逗号。
选项 B: x=(1) → 错误。这里的圆括号仅起到优先级包裹的作用, (1) 本质上就是整数 1,不是元组。
选项 C: x=() → 正确。这是空元组的标准定义方式。
选项 D: x=(1,2,3) → 正确。这是多元素元组的正确定义方式。
# 2. 题目
对于元组t = (1,2,3,4),以下哪个操作会报错 ( D ) | |
A.len(t) | |
B.max(t) | |
C.min(t) | |
D.tuple[2] = 5 |
答案:D
选项 A: len(t) → 正确。 len() 函数可以获取元组的长度。
选项 B: max(t) → 正确。 max() 函数可以获取元组中的最大值。
选项 C: min(t) → 正确。 min() 函数可以获取元组中的最小值。
选项 D: tuple[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'。