答案页 · 12 道题

Python itertools练习答案

本页汇总 Python itertools 的 12 道练习。先做练习页,再回到这里核对准确答案和原因。

快速答案

本答案页包含 Python itertools 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。

答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。

01 · 选择题

count(5) 会产生什么?

  1. 包含五个键的字典
  2. 从 0 到 5 的列表
  3. 从 5 开始的无限序列正确答案
  4. 恰好五个值

答案: 从 5 开始的无限序列

为什么: count 是惰性且无限的;需要用 islice 或 zip 加上边界。

02 · 选择题

chain 会做什么?

  1. 把可迭代对象首尾拼接正确答案
  2. 计数值
  3. 分组相邻的键
  4. 排序值

答案: 把可迭代对象首尾拼接

为什么: chain 会依次读取可迭代对象,形成单一数据流。

03 · 选择题

list(islice(count(0), 3)) 会产生什么?

  1. [1, 2, 3]
  2. [3]
  3. [0, 1, 2, 3]
  4. [0, 1, 2]正确答案

答案: [0, 1, 2]

为什么: islice 从无限的 count 流中取出前三个值。

04 · 选择题

相同键分散时,使用 groupby 前必须先做什么?

  1. 调用两次 list
  2. 使用 count
  3. 转换成字符串
  4. 排序数据正确答案

答案: 排序数据

为什么: groupby 只分组相邻元素,所以相同键不连续时要先排序。

05 · 填空题

补全把两个可迭代对象拼接起来的函数。

from itertools import chain
print(list(____([1], [2])))

答案: chain

为什么: chain 先读取第一个可迭代对象,再读取第二个。

06 · 填空题

补全给无限 count 加上边界的函数。

from itertools import count, islice
print(list(____(count(1), 2)))

答案: islice

为什么: islice 从可迭代对象中取出固定数量的值。

07 · 填空题

补全分组相邻值的函数。

from itertools import groupby
data = [1, 1, 2]
for key, group in ____(data):
    print(key, len(list(group)))

答案: groupby

为什么: groupby 会把共享同一个键的连续元素分组。

08 · 填空题

补全导入拼接两个列表的函数。

from itertools import ____
print(list(chain([1], [2])))

答案: chain

为什么: chain 函数从 itertools 导入。

09 · 输出预测

代码的输出结果是什么?

from itertools import count, islice
print(list(islice(count(3), 2)))

答案: [3, 4]

为什么: 序列从三开始,islice 取出两个值。

10 · 输出预测

屏幕上会显示什么?

from itertools import chain
print(list(chain("ab", "cd")))

答案: ['a', 'b', 'c', 'd']

为什么: chain 把两个字符串拼成一个字符流。

11 · 输出预测

这段代码会输出什么?

from itertools import chain
print(list(chain([1], [2, 3])))

答案: [1, 2, 3]

为什么: chain 先读取第一个列表,再读取第二个列表。

12 · 输出预测

运行结果是什么?

from itertools import groupby
data = [1, 1, 2]
print([(k, len(list(g))) for k, g in groupby(data)])

答案: [(1, 2), (2, 1)]

为什么: 第一组有两个一,第二组有一个二。

先试一遍题目

打开 Python itertools 练习页,用即时反馈回答同样的 12 道题。

练习本课