答案頁 · 12 道題

Python itertools練習答案

本頁彙整 Python itertools 的 12 道練習。先做練習頁,再回到這裡核對準確答案和原因。

快速答案

本答案頁包含 Python itertools 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。

答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。

01 · 選擇題

count(5) 會產生什麼?

  1. 從 0 到 5 的列表
  2. 包含五個鍵的字典
  3. 恰好五個值
  4. 從 5 開始的無限序列正確答案

答案: 從 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]正確答案
  4. [0, 1, 2, 3]

答案: [0, 1, 2]

為什麼: islice 從無限的 count 流中取出前三個值。

04 · 選擇題

相同鍵分散時,使用 groupby 前必須先做什麼?

  1. 使用 count
  2. 轉換成字串
  3. 排序資料正確答案
  4. 呼叫兩次 list

答案: 排序資料

為什麼: 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 道題。

練習本課