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

Far*_*wle 1 python for-loop list-comprehension list python-3.x

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

for i in list:
    if i>b:
        i=5
    else:
        i=0
Run Code Online (Sandbox Code Playgroud)

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

有什么解决办法吗?

Eli*_*old 5

你的尝试:

[i if i>b 5 else 0 for i in a]
Run Code Online (Sandbox Code Playgroud)

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

[5 if i>b else 0 for i in a]
Run Code Online (Sandbox Code Playgroud)

测试代码:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

[0, 0, 0, 5, 5, 5, 5, 5, 5, 5]
Run Code Online (Sandbox Code Playgroud)

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

output = NumberIfTrue if LogicStatement else NumberIfFalse
Run Code Online (Sandbox Code Playgroud)

相当于:

if LogicStatement:
    output = NumberIfTrue
else:
    output = NumberIfFalse
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

LogicStatement = i>b
NumberIfTrue = 5
NumberIfFalse = 0
Run Code Online (Sandbox Code Playgroud)

因此你需要(如上所示):

5 if i>b else 0
Run Code Online (Sandbox Code Playgroud)

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

for i in a
Run Code Online (Sandbox Code Playgroud)

像这样:

5 if i>b else 0 for i in a
Run Code Online (Sandbox Code Playgroud)

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

[5 if i>b else 0 for i in a]
Run Code Online (Sandbox Code Playgroud)

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

output = [5 if i>b else 0 for i in a]
Run Code Online (Sandbox Code Playgroud)