以下代码在Python中有效

var=range(20)
var_even = [0 if x%2==0 else x for x in var]
print var,var_even


但是,我认为条件必须放在列表的末尾。如果我编写代码

var_even = [0 if x%2==0 for x in var]


那就行不通了。是否有一个原因?

最佳答案

这里涉及两种截然不同但外观相似的语法,即条件表达式和列表理解过滤器子句。

条件表达式的格式为x if y else z。此语法与列表推导无关。如果要在列表理解中有条件地包含一件事或另一件事,则可以使用以下方法:

var_even = [x if x%2==0 else 'odd' for x in var]
#             ^ "if" over here for "this or that"


列表理解过滤器子句是if thing中的elem for x in y if thing。这是列表理解语法的一部分,并且在for子句之后。如果要在列表推导中有条件地包括或不包括元素,可以使用以下方法:

var_even = [x for x in var if x%2==0]
#                          ^ "if" over here for "this or nothing"

关于python - 列出具有多个条件的理解(python),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38402777/

10-11 22:09