ループを使わずにポケモンを集める
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_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])