【发布时间】:2017-05-21 13:44:11
【问题描述】:
在我的代码中,我试图循环遍历一个枚举对象,并使用列表推导有选择地将枚举中的一些值添加到一个新列表中。
这行得通:
a = [1, 2, 3, 4, 5]
s = [i[1] for i in enumerate(a)]
当然,这基本上只是将列表 a 复制到 s。
这不起作用(同一个列表):
s = [i[1] if i[1] != 2 for i in enumerate(a)]
我认为这只会将列表 a 的每个元素复制到除了 2 之外的 s 上,但是我得到了一个语法错误。有人知道这里发生了什么吗?
【问题讨论】:
-
三元运算符需要 3 个操作数(在名称中)。你的只有 2 个,所以不,那行不通。
-
将
if移到理解的末尾。 -
Python 在这里受到了关键字重载的影响。
if可用于在条件表达式(a if b else c)中启动条件语句 (if ... then ... elif ... else),并在生成器表达式或列表理解 ([ ... for ... in ... if ... ]) 中启动过滤器。这三个结构中的每一个都与其他结构无关,除了使用相同的关键字。设计过程中一些更详细的选择可能会减少混乱:if ... then ... else、a when b otherwise c和[ ... for ... in ... whenever ... ]。
标签: python list-comprehension ternary-operator enumerate