始める無料で始める

ループを使わずにポケモンを集める

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コードの書き方

コースを見る

演習の手順

  • 上記の for ループを、リスト内包表記と map() 関数を使って置き換えましょう。

    • 第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])
コードを編集して実行