Сбор покемонов без цикла
В вашей сессии загружен список из 720 покемонов — poke_names. Также загружен список poke_gens, содержащий соответствующее поколение для каждого покемона.
Для фильтрации покемонов первого и второго поколений и подсчёта количества букв в каждом имени был создан следующий цикл for:
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():- С помощью спискового включения отберите покемонов, принадлежащих к первому или второму поколению. Сохраните результат в переменную
gen1_gen2_pokemon. - С помощью функции
map()вычислите количество букв в именах покемонов из спискаgen1_gen2_pokemon. Сохраните этот объект map в переменнуюname_lengths_map. - Объедините
gen1_gen2_pokemonиname_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])