给定一个列表xs:

xs = [22, 13, 45, 50, 98, 69, 43, 44, 1]

大于45的,加1;对于小于45的数,加5。


当前回答

将表达式放在列表推导式的开头。if语句用于过滤元素!

[x+1 if x >= 45 else x+5 for x in xs]

其他回答

[x+1 if x >= 45 else x+5 for x in xs]

作为奖励,下面是评论,我写的是为了记住我第一次犯这个错误:

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]

将表达式放在列表推导式的开头。if语句用于过滤元素!

[x+1 if x >= 45 else x+5 for x in xs]

就像在[a if condition1 else b for i in list1 if condition2]中一样,这两个if与condition1和condition2做了两件不同的事情。部分(a if condition1 else b)来自lambda表达式:

lambda x: a if condition1 else b

而另一个条件2是另一个lambda:

lambda x: condition2

整个列表的理解可以看作map和filter的组合:

map(lambda x: a if condition1 else b, filter(lambda x: condition2, list1))
>>> xs = [22, 13, 45, 50, 98, 69, 43, 44, 1]
>>> [x+1 if x >= 45 else x+5 for x in xs]
[27, 18, 46, 51, 99, 70, 48, 49, 6]

如果<条件>则执行某些操作,否则执行其他操作。

你可以将条件句移动到:

v = [22, 13, 45, 50, 98, 69, 43, 44, 1]
[ (x+1 if x >=45 else x+5)  for x in v ]

但是它开始看起来有点丑了,所以你最好使用一个普通的循环。请注意,我使用v而不是l作为列表变量,以减少与数字1的混淆(我认为在任何情况下都应避免使用l和O作为变量名,即使是在快速而肮脏的示例代码中)。