ループを使わずに求めるポケモンの合計値と平均値
720匹のポケモンのリストが names として読み込まれています。各ポケモンに対応する統計量は NumPy 配列 stats として読み込まれています。stats の各行は names の各ポケモンに対応し、各列はそれぞれ個別のステータス(HP、Attack、Defense、Special Attack、Special Defense、Speed)を表します。
最強のポケモンを見つけるために、各ポケモンの総合値(stats の各行の合計)と平均値(stats の各行の平均)を集計したいとします。
以下は、これらの値を集めるために書かれた 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コードの書き方
演習の手順
- 上の for ループを NumPy を使って置き換えてください。
.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))