Bắt đầu ngayBắt đầu miễn phí

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ả

Xem khóa học

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ách gen1_gen2_pokemon. Lưu đối tượng map này là name_lengths_map.
    • Kết hợp gen1_gen2_pokemonname_lengths_map thành một danh sách gọi là gen1_gen2_name_lengths.

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])
Chỉnh sửa và Chạy Mã