【问题标题】:Python3: Syntax error when 'if' is used before the for loopPython3:在 for 循环之前使用“if”时出现语法错误
【发布时间】:2018-03-15 19:02:57
【问题描述】:

在没有elsefor 循环之前使用if 时出现语法错误,但当else 存在时不会出现此类错误。

这是我的代码:

data=[[45, 12],[55,21],[19, -2],[104, 20]]
retData= ['Close' if i>54 and j>7 for [i,j] in data]
# getting a syntax error here :(
return retData

下面的代码有效,它在for 循环之前有ifelse

data=[[45, 12],[55,21],[19, -2],[104, 20]]
retData= ['Close' if i>54 and j>7 else 'Open' for [i,j] in data]
# No Syntax error here!!
return retData

【问题讨论】:

  • 您期望在第一种情况下会发生什么?如果条件不满足,是否要从列表中排除项目?在这种情况下,您应该使用语法[something(v) for v in data if condition(v)]
  • 是的,如果不满足条件,则应排除列表中的项目,但问题仍然存在,为什么语法 [something(v) if condition(v) else somethingElse(v) for v in data ] 工作得很好,但语法 [something(v) if condition(v)) for v in data ] 给出错误.

标签: python python-3.x loops


【解决方案1】:

Oups,三元运算符的 Python 语法之间存在混淆:

expression_if_true if condition else expression_if_false

和条件列表理解

[ expression for elt in list if condition ]

第二个代码是一个无条件列表解析(for 之后没有if),其中表达式包含三元运算符。

在第一个代码中,您没有 else 条件,因此您必须使用条件列表推导,其中 if acts 作用于 for 并且放在 if 之后:

retData= ['Close' for [i,j] in data if i>54 and j>7]

【讨论】:

    【解决方案2】:

    您要查找的语法是。

    data=[[45, 12],[55,21],[19, -2],[104, 20]]
    retData= ['Close'  for [i,j] in data if i>54 and j>7]
    

    如果列表理解中只有if 条件,那么它应该出现在循环语法之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 2016-09-04
      • 2019-01-07
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多