列表推导中的if else
我有一个列表 l
:
l = [22, 13, 45, 50, 98, 69, 43, 44, 1]
对于大于或等于45的数字,我想加1;而对于小于45的数字,我想加5。
我试过这样做:
[x+1 for x in l if x >= 45 else x+5]
但是出现了语法错误。我该如何在列表推导式中实现这样的 if
– else
?
8 个回答
307
[x+1 if x >= 45 else x+5 for x in l]
作为奖励,这里有我写的评论,用来记住我第一次犯这个错误时的情况:
Python中的条件表达式是
a if C else b
,不能这样使用:[a for i in items if C else b]
正确的写法是:
[a if C else b for i in items]
虽然有一种有效的写法:
[a for i in items if C]
但这和你通过
C
进行筛选的方式并不一样,不过它们可以结合使用:[a if tC else b for i in items if fC]
353
你遇到这个错误的原因跟列表推导式的执行方式有关。
记住以下几点:
[ expression for item in list if conditional ]
这相当于:
for item in list:
if conditional:
expression
这里的 expression
格式稍微有点不同(就像在句子中调换主语和动词的顺序)。
所以,你的代码 [x+1 for x in l if x >= 45]
实际上是做了这个:
for x in l:
if x >= 45:
x+1
但是,这段代码 [x+1 if x >= 45 else x+5 for x in l]
做的是这个(在重新排列 expression
后):
for x in l:
if x>=45: x+1
else: x+5
814
>>> l = [22, 13, 45, 50, 98, 69, 43, 44, 1]
>>> [x+1 if x >= 45 else x+5 for x in l]
[27, 18, 46, 51, 99, 70, 48, 49, 6]
如果满足<condition>
这个条件,就做某件事;否则就做另一件事。