我想知道是否可以使用if
/ else
的列表理解,这些列表理解不需要导致与正在处理的列表长度相同的长度列表? (即没有最终的else
)
>>> L = [0, 1, 2, 3, 4, 5, 6]
>>> [v * 10 if v < 3 else v * 2 if v > 3 else v for v in L] #if/else/if/else
[0, 10, 20, 3, 8, 10, 12]
工作正常。但是假设我想省略3,得到:
[0, 10, 20, 8, 10, 12] # No number 3
我原以为这会起作用:
>>> [v * 10 if v < 3 else v * 2 if v > 3 for v in L] #if/else/if
但这是语法错误..
所以我想'也许'这会起作用:
>>> [v * 10 if v < 3 else v * 2 if v > 3 else pass for v in L] #if/else/if/else pass
但它没有..
这是一个好奇的问题,我意识到这不是上述处理中最可读/最合适的方法。
我错过了什么吗?可以吗? (我在python 2.6.5上)
答案 0 :(得分:14)
是的,这是可能的:
[foo for foo in bar if foo.something]
或者在你的情况下:
[v * 10 if v < 3 else v * 2 for v in L if v != 3]
我在the docs中也提到过。
答案 1 :(得分:4)
在循环之后放置过滤条件:
[v * 10 if v < 3 else v * 2 for v in L if v != 3]
返回
[0, 10, 20, 8, 10, 12]
答案 2 :(得分:0)
A=[[x*2, x*10][x <3] for x in L if x!=3]
答案 3 :(得分:-2)
做错了
out = []
for v in L:
if v < 3:
out.append(v * 10)
elif v > 3:
out.append(v * 2)
else:
pass