開始使用免費開始

不用迴圈蒐集寶可夢

一個包含 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_pokemonname_lengths_map 合併為名為 gen1_gen2_name_lengths 的清單。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# 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])
編輯並執行程式碼