Coding for KidsCoding for Kids
创意关卡挑战教师指南
为功能投票
高级 Python 开发课程
第 章
>
第 级

高级列表
列表推导式

在本章中,我们将探索在 Python 中使用列表的新方法,涉及优化、模块化,甚至制作类似表格的大型多维列表(矩阵)。

在这一关中,我们将使用列表推导式。这些列表可以从其他列表中创建,只选择其中的某些部分。这个过程只需一行非常直观的代码,而无需手动输入列表或设计复杂的自动化方案。

Guide

目标

收集并整理储藏室中的所有根类蔬菜,以便使用列表推导式将它们存放在正确的位置。

储藏室里有几个装满根类蔬菜的袋子,需要进行分类,这些根类蔬菜包括:potatoesonionsgarlic,袋中可能还混有已经变质的蔬菜。请取出可以食用的蔬菜,并将它们放入各自所属的板条箱中。

为了完成这一任务,你需要确定每个袋子中装的是什么蔬菜,有三个(3)列表常量保存了每个袋子的内容,它们的名字分别是:left_sackmiddle_sackright_sack。这些列表常量分别对应场上标有相应位置的袋子。

请走向每个袋子前面标有金色 X 的位置,并使用 speak() 函数结合这些常量来识别袋子中的内容,例如:player.speak(left_sack)。一旦确定了每个袋子内的内容,就要找出需要移除的蔬菜,比如名称中包含了:"Bad"、"Spoiled" 或 "Rotten" 的蔬菜。

你需要创建新的列表,只包含适合食用的蔬菜。你也可以手动创建这些列表,但是这样会花很多时间,而且容易混淆。为了更有效地完成这个任务,你可以从一个列表中创建另一个列表,这就是所谓的列表推导式

从这三个(3)列表常量:left_sackmiddle_sackright_sack 中,创建三个新的列表,分别命名为:potatoesonionsgarlic,这些列表中不含袋子中不需要的元素。列表推导式允许你在不编写大量代码的情况下创建新列表,例如:

# Original list sack = ["Potatoes", "Sweet Potatoes", "Spoiled Potatoes" ] # List Comprehension potatoes = [x for x in sack if not "Spoiled" in x] # This will create a list named potatoes with: # ["Potatoes", "Sweet Potatoes"]

在上述例子中,列表 potatoes 是从列表 sack 中创建的,只包含 ["Potatoes", "Sweet Potatoes"],而排除了包含 "Spoiled" 的项目,即 "Spoiled Potatoes"。这是通过创建一个独立的 for 循环来实现的,在此例中用 x 作为遍历列表的索引,并利用 for / in 语句识别并排除不需要的元素,也就是任何包含了单词 "Spoiled" 的字符串。

回顾一下,使用 speak() 函数检查列表常量中是否含有 "Bad"、"Spoiled" 或 "Rotten",然后使用列表推导式创建 potatoesonionsgarlic 列表,将在每个列表中找到的不需要的元素移除。

一旦这些列表创建好了,就到每个标有金色 X 的板条箱前(板条箱上有蔬菜的标志),使用 place() 函数将这些列表放入对应的板条箱中以完成关卡。板条箱的位置由标志指示,分别是:左侧板条箱放 onions,中间板条箱放 potatoes,右侧板条箱放 garlic

代码书