if 和 else 在单行 python 循环中

inv*_*dex 3 python for-loop if-statement list-comprehension

抱歉,如果这么简单的话;当我在其他地方搜索时,但没有人指出这个具体问题。我想以一种使我的代码紧凑的方式学习Python!因此,为此,我尝试使用单行(即短)循环而不是多行循环,特别是 for 循环。当我尝试在单行循环内使用单行 if 和 else 时,问题就出现了。它似乎不起作用。例如,考虑以下情况:

numbers = ... # an arbitrary array of integer numbers

over_30 = [number if number > 30 for number in numbers]
Run Code Online (Sandbox Code Playgroud)

这是有问题的,因为one-line if确实需要else遵循它。尽管如此,当我添加else到上面的脚本(在if):之后over_30 = [number if number > 30 else continue for number in numbers],它变成了另一个 pythonic 错误。

我知道问题实际上出在单行 if 和 else 上,因为 python 需要识别一个应该分配给左侧运算符的值。但是,对于上述模式的特定用例是否有解决方法?

Sel*_*cuk 9

它们是不同的语法。您正在寻找的是:

over_30 = [number for number in numbers if number > 30]
Run Code Online (Sandbox Code Playgroud)

这是条件列表理解。该else子句实际上是一个非条件列表理解,与一个三元表达式相结合:

over_30 = [number if number > 30 else 0 for number in numbers]
Run Code Online (Sandbox Code Playgroud)

在这里,您正在计算可迭代中每个的三元表达式 ( number if number > 30 else 0) 。numbernumbers