รวบรวมโปเกมอนโดยไม่ใช้ loop
ลิสต์ที่มีโปเกมอน 720 ตัวถูกโหลดเข้า session แล้วในชื่อ poke_names และลิสต์อีกตัวที่เก็บเจเนอเรชันของโปเกมอนแต่ละตัวถูกโหลดเป็น poke_gens
มีการสร้าง for loop เพื่อกรองโปเกมอนที่อยู่ในเจเนอเรชัน 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 Code ที่มีประสิทธิภาพ
คำแนะนำการฝึกหัด
กำจัด for loop ข้างต้นโดยใช้ list comprehension และฟังก์ชัน
map():- ใช้ list comprehension เพื่อคัดเลือกโปเกมอนที่อยู่ในเจเนอเรชัน 1 หรือเจเนอเรชัน 2 บันทึกผลลัพธ์เป็น
gen1_gen2_pokemon - ใช้ฟังก์ชัน
map()เพื่อนับจำนวนตัวอักษรในชื่อโปเกมอนแต่ละตัวในgen1_gen2_pokemonบันทึก map object นี้เป็นname_lengths_map - รวม
gen1_gen2_pokemonและname_lengths_mapเข้าด้วยกันเป็นลิสต์ชื่อgen1_gen2_name_lengths
- ใช้ list comprehension เพื่อคัดเลือกโปเกมอนที่อยู่ในเจเนอเรชัน 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])