開始使用免費開始

不用迴圈計算 Pokémon 的總和與平均

一個包含 720 隻 Pokémon 的清單已載入為 names。每隻 Pokémon 對應的能力值已載入為 NumPy 陣列 statsstats 的每一列對應 names 中的一隻 Pokémon,而每一欄分別代表該 Pokémon 的能力值(依序為 HPAttackDefenseSpecial AttackSpecial DefenseSpeed)。

你想蒐集每隻 Pokémon 的能力值總和(也就是 stats 每一列的加總)與能力值平均(也就是 stats 每一列的平均),好找出最強的 Pokémon。

以下的 for 迴圈原本用來收集這些數值:

poke_list = []

for pokemon,row in zip(names, stats):
    total_stats = np.sum(row)
    avg_stats = np.mean(row)
    poke_list.append((pokemon, total_stats, avg_stats))

本練習屬於課程

撰寫高效的 Python 程式碼

檢視課程

練習說明

  • 使用 NumPy 取代上面的 for 迴圈:
    • 使用 .sum() 並指定正確的軸,建立總能力值陣列(total_stats_np)。
    • 使用 .mean() 並指定正確的軸,建立平均能力值陣列(avg_stats_np)。
    • names 清單、total_stats_np 陣列與 avg_stats_np 陣列結合,建立最終輸出清單(poke_list_np)。

動手互動練習

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

# Create a total stats array
total_stats_np = ____.____(axis=____)

# Create an average stats array
avg_stats_np = ____

# Combine names, total_stats_np, and avg_stats_np into a list
poke_list_np = [*____(names, total_stats_np, avg_stats_np)]

print(poke_list_np == poke_list, '\n')
print(poke_list_np[:3])
print(poke_list[:3], '\n')
top_3 = sorted(poke_list_np, key=lambda x: x[1], reverse=True)[:3]
print('3 strongest Pokémon:\n{}'.format(top_3))
編輯並執行程式碼