不用迴圈蒐集寶可夢
一個包含 720 隻寶可夢的清單已載入為 poke_names。另一個包含對應世代的清單已載入為 poke_gens。
下方有一個 for 迴圈,會篩選屬於第 1 或第 2 世代的寶可夢,並收集每個寶可夢名字的字母數:
gen1_gen2_name_lengths_loop = []
for name,gen in zip(poke_names, poke_gens):
if gen < 3:
name_length = len(name)
poke_tuple = (name, name_length)
gen1_gen2_name_lengths_loop.append(poke_tuple)
本練習屬於課程
撰寫高效的 Python 程式碼
練習說明
使用串列生成式與
map()取代上面的 for 迴圈:- 用串列生成式蒐集屬於第 1 或第 2 世代的每個寶可夢,存成
gen1_gen2_pokemon。 - 使用
map()對gen1_gen2_pokemon中每個寶可夢的名字計算字母數,將此「map 物件」存為name_lengths_map。 - 將
gen1_gen2_pokemon和name_lengths_map合併為名為gen1_gen2_name_lengths的清單。
- 用串列生成式蒐集屬於第 1 或第 2 世代的每個寶可夢,存成
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Collect Pokémon that belong to generation 1 or generation 2
gen1_gen2_pokemon = [name for name,gen in ____(____, ____) if gen < ____]
# Create a map object that stores the name lengths
name_lengths_map = ____(len, ____)
# Combine gen1_gen2_pokemon and name_lengths_map into a list
gen1_gen2_name_lengths = [*____(____, ____)]
print(gen1_gen2_name_lengths_loop[:5])
print(gen1_gen2_name_lengths[:5])