如果列表理解中是if / else / if吗?

时间:2012-03-16 12:11:15

标签: python list-comprehension

我想知道是否可以使用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上)

4 个答案:

答案 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