给定一个列表xs:
xs = [22, 13, 45, 50, 98, 69, 43, 44, 1]
大于45的,加1;对于小于45的数,加5。
给定一个列表xs:
xs = [22, 13, 45, 50, 98, 69, 43, 44, 1]
大于45的,加1;对于小于45的数,加5。
当前回答
得到这个错误的原因与列表推导的执行方式有关。
请记住以下几点:
[ expression for item in list if conditional ]
等价于:
for item in list:
if conditional:
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]这样做(在重新排列表达式后):
for x in l:
if x>=45: x+1
else: x+5
其他回答
[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]
你也可以把条件表达式放在括号内的列表理解:
l = [22, 13, 45, 50, 98, 69, 43, 44, 1]
print [[x+5,x+1][x >= 45] for x in l]
[false,true][condition]是语法
>>> 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]
如果<条件>则执行某些操作,否则执行其他操作。
得到这个错误的原因与列表推导的执行方式有关。
请记住以下几点:
[ expression for item in list if conditional ]
等价于:
for item in list:
if conditional:
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]这样做(在重新排列表达式后):
for x in l:
if x>=45: x+1
else: x+5
将表达式放在列表推导式的开头。if语句用于过滤元素!
[x+1 if x >= 45 else x+5 for x in xs]