列表推导中的if else

690 投票
8 回答
1174285 浏览
提问于 2025-04-16 08:20

我有一个列表 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]

但是出现了语法错误。我该如何在列表推导式中实现这样的 ifelse

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>这个条件,就做某件事;否则就做另一件事。

撰写回答