如果在列表理解中条件为真,则使用 python 命令?

Using python command if a condition is true in list comprehension?

我想将下面的代码转换成列表理解。

for i in list:
    if i>b:
        i=5
    else:
        i=0

我尝试使用 [i if i>b 5 else 0 for i in a] 但它导致语法错误。我也试过 [i for i in a if i>b 5 else 0] 但这也导致了语法错误。

有什么解决办法吗?

您的尝试:

[i if i>b 5 else 0 for i in a]

很接近,你只想给5而不是像这样i

[5 if i>b else 0 for i in a]

测试代码:

a = [1,2,3,4,5,6,7,8,9,10]
b = 3
output = [5 if i>b else 0 for i in a]
print(output)

输出:

[0, 0, 0, 5, 5, 5, 5, 5, 5, 5]

这是有效的,因为当语句计算为 True 时给出 if 之前的项目,否则给出 else 之后的值。所以:

output = NumberIfTrue if LogicStatement else NumberIfFalse

等同于:

if LogicStatement:
    output = NumberIfTrue
else:
    output = NumberIfFalse

你的情况:

LogicStatement = i>b
NumberIfTrue = 5
NumberIfFalse = 0

因此你需要(如上图):

5 if i>b else 0

然后您想将此应用到列表中的每个项目,添加:

for i in a

像这样:

5 if i>b else 0 for i in a

现在这是一个生成器,因为您需要一个列表,所以您必须用 [] 括号将生成器括起来,以便它“生成”具有您想要的值的列表。所以只是:

[5 if i>b else 0 for i in a]

然后为了获得最终解决方案,我们只需将结果分配给 output 以便再次使用它:

output = [5 if i>b else 0 for i in a]

在你的版本中

  [i if i>b 5 else 0 for i in list]

语法错误就在 i>b 之后。 你在那里有“真正的价值”,它在错误的地方。 重复您的原始代码

for i in list:
    if i>b: #condition
        i=5 #true action
    else:
        i=0 #false action

真正的答案是

[5 if i > b else 0 for i in list]

伪代码版本

[<true action> if <condition> else <false action> for i in list]