我想知道是否可能使用带有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)
[expr_of_x for x in iterable if expr_of_x]
,但其中(a if b else c)
是表达式。你甚至可以保留括号,以使列表推导式对读者更加明显。 - ninjagecko