不使用循环收集宝可梦
包含 720 个宝可梦的列表已作为 poke_names 加载到您的会话中。另一个包含每个宝可梦对应世代的列表已作为 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 代码
练习说明
使用列表推导式和
map()函数消除上述 for 循环:- 使用列表推导式收集属于第 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])