Thu thập Pokémon mà không cần vòng lặp
Một danh sách chứa 720 Pokémon đã được nạp vào phiên làm việc của bạn dưới tên poke_names. Một danh sách khác chứa thế hệ (generation) tương ứng của mỗi Pokémon đã được nạp dưới tên poke_gens.
Một vòng lặp for đã được tạo để lọc các Pokémon thuộc thế hệ một hoặc hai, và thu thập số lượng chữ cái trong tên của mỗi Pokémon:
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)
Bài tập này là một phần của khóa học
Viết mã Python hiệu quả
Hướng dẫn bài tập
Loại bỏ vòng lặp for ở trên bằng cách dùng list comprehension và hàm
map():- Dùng list comprehension để thu thập mỗi Pokémon thuộc thế hệ 1 hoặc thế hệ 2. Lưu lại dưới tên
gen1_gen2_pokemon. - Dùng hàm
map()để lấy số lượng chữ cái trong tên của mỗi Pokémon trong danh sáchgen1_gen2_pokemon. Lưu đối tượng map này làname_lengths_map. - Kết hợp
gen1_gen2_pokemonvàname_lengths_mapthành một danh sách gọi làgen1_gen2_name_lengths.
- Dùng list comprehension để thu thập mỗi Pokémon thuộc thế hệ 1 hoặc thế hệ 2. Lưu lại dưới tên
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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])