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]
,但这也导致了语法错误。
有什么解决办法吗?
你的尝试:
[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)
归档时间: |
|
查看次数: |
109 次 |
最近记录: |