1. Learn
  2. /
  3. 课程
  4. /
  5. 高效编写 Python 代码

Connected

道练习

不使用循环收集宝可梦

包含 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)

说明

100 XP
  • 使用列表推导式和 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 的列表。