【问题标题】:Ternary operator in enumeration loop [duplicate]枚举循环中的三元运算符
【发布时间】: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 ... elsea when b otherwise c[ ... for ... in ... whenever ... ]

标签: python list-comprehension ternary-operator enumerate


【解决方案1】:

您放错了if 部分:

  s = [i[1] for i in enumerate(a) if i[1] != 2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2020-07-07
    • 2011-01-28
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多