2.2.3-可迭代对象的遍历方法.md

问答库

2.2.3 可迭代对象的遍历方法(问答库)

  1. 【单选题·易】内置函数 map() 接受两个参数,这两个参数依次是( ) A. 一个可迭代对象和一个整数 B. 一个函数和一个可迭代对象 C. 两个列表的长度 D. 一个字典和一个字符串 答案:B 解析: 语料明确指出:map() 接受两个参数——一个函数和一个可迭代对象,并将该函数应用于可迭代对象中的每个元素。
  2. 【单选题·易】内置函数 zip() 的作用是( ) A. 将可迭代对象压缩成 zip 文件 B. 将一个函数作用于可迭代对象的每个元素 C. 将两个或多个可迭代对象中对应位置的元素配对,形成一个元组 D. 求可迭代对象的长度 答案:C 解析: zip() 接收两个或多个可迭代对象,把对应位置的元素配成元组,再把这些元组作为可迭代对象的元素返回。B 项是 map() 的作用。
  3. 【判断题·易】map()、zip() 返回的对象本身就是列表,直接 print 就能看到其中的全部序列值。 答案:× 解析: 二者返回的是可迭代对象而不是列表。课程示例都是先写成 print(list(mapped))、print(list(zipped)),转换成列表后才能输出其中的内容。
  4. 【判断题·易】enumerate() 在遍历可迭代对象时,可以同时获取元素的索引和值。 答案:√ 解析: 语料指出:enumerate() 在遍历时同时获取元素的索引和值,返回一个包含索引和值的元组,常用于需要在循环中同时访问元素和其索引的场景。
  5. 【多选题·中】根据课程内容,Python 遍历可迭代对象的三种方法包括( ) A. 用 for...in 遍历 B. 使用 enumerate() 内置函数 C. 依次遍历可迭代对象的索引(while 和 for...in 均可) D. 只能使用 while,不能使用 for...in 答案:ABC 解析: 课程明确给出三种方法。D 错误:第三种方法用 while 和 for...in 均可,常见写法是 for i in range(len(a))。
  6. 【单选题·中】例 2-8 用 enumerate() 输出学生序号与成绩时写成 print(i+1, v)。其中对索引 i 加 1 的原因是( ) A. 列表的长度必须加 1 才能遍历完 B. 第一个元素的索引是 0,加 1 后用来表示学号 C. enumerate() 默认从 1 开始编号,必须再加 1 D. 不加 1 程序会报错 答案:B 解析: 用 enumerate 遍历时同时得到索引 i 和值 v。第一个元素的索引是 0,给它加 1 以表示学号。enumerate() 并非默认从 1 开始。
  7. 【多选题·中】关于 map() 和 zip(),下列说法正确的有( ) A. map() 将一个函数应用于可迭代对象中的每个元素,并返回新的可迭代对象 B. zip() 只能接收一个可迭代对象 C. zip() 接收两个或多个可迭代对象作为参数 D. 二者返回的都是可迭代对象,常用 list() 转换后再查看内容 答案:ACD 解析: A、C、D 与语料一致。B 错误:zip() 接收两个或多个可迭代对象,不是只能接收一个。
  8. 【判断题·中】执行 for v in a: v *= 2 之后,列表 a 中的每个元素都会变成原来的 2 倍。 答案:× 解析: 用 for...in 或 enumerate() 时,修改遍历变量不能作用于原来的列表。v *= 2 只把变量 v 变成原来的 2 倍,并没有改变列表中的元素。
  9. 【简答题·中】简述 Python 遍历可迭代对象的三种方法,并说明各自更适合什么场合。 答案: ① 用 for...in 直接遍历元素,适合只关心值、不关心位置的统计与筛选。② 使用 enumerate(),同时得到索引和值,适合既要元素又要位置(如输出学号与成绩)的场合。③ 依次遍历索引,while 与 for i in range(len(a)) 均可;当必须修改原列表中的元素时,应采用这种方法。 解析: 评分要点:三种方法名称齐全;能指出 enumerate() 同时提供索引与值;能指出“改原列表须走索引”。漏第三种或把 map/zip 误当成第三种遍历方法,应扣分。
  10. 【单选题·难】运行下列程序,输出结果是什么?
a = [1, 2, 3]
for v in a:
    v *= 2
print(a)

A. [2, 4, 6] B. [1, 2, 3] C. 程序报错 D. [1, 2, 3, 2, 4, 6] 答案:B 解析: for v in a 时,v 只是当前元素的一个副本(循环变量)。v *= 2 只改变 v,不改写 a 中的元素,因此 print(a) 仍为 [1, 2, 3]。若要真正加倍,应写成 for i in range(len(a)): a[i] *= 2。

  1. 【简答题·难】例 2-9 要求将一个整数列表中的每个元素变成原来的 2 倍。请说明写法 for v in a: v *= 2 为什么达不到目的,并写出一段语法正确、可直接运行的正确程序(可用固定列表代替随机数)。 答案: 原因:用 for...in 遍历时,修改循环变量不能作用于原来的列表;v *= 2 只改变变量 v,循环前后列表相同。正确做法是用 len() 得到长度、用 range() 生成索引,再通过 a[i] 改写元素。示例程序:
a = [1, 2, 3, 4]
print(a)
for i in range(len(a)):
    a[i] *= 2
print(a)

运行后先输出 [1, 2, 3, 4],再输出 [2, 4, 6, 8]。 解析: 评分要点:① 准确说明“改循环变量 ≠ 改原列表”;② 代码使用 range(len(a)) 与 a[i] *= 2,缩进正确、可运行;③ 能说明运行结果。只写 enumerate 再改 v 仍不得满分。

  1. 【单选题·难】运行下列程序,输出结果是什么?
a = [12, 15, 7, 9, 20]
t = 0
for v in a:
    if v % 3 == 0:
        t += 1
print('3的倍数数量是:', t)

A. 3的倍数数量是:3 B. 3的倍数数量是: 3 C. 3 D. 4 答案:B 解析: for...in 依次取出 12、15、7、9、20,其中 12、15、9 能被 3 整除,t 为 3。print 多个参数时默认以空格分隔,因此冒号与 3 之间有一个空格,得到 3的倍数数量是: 3。A 漏了空格,C 丢掉提示文字,D 把 20 也误算进去了。

下载此文件