루프 없이 포켓몬 모으기
poke_names에는 720개의 포켓몬이, 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])