繁体   English   中英

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

[英]Is if/else/if possible in 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上)

是的,这是可能的:

[foo for foo in bar if foo.something]

或者在你的情况下:

[v * 10 if v < 3 else v * 2 for v in L if v != 3]

我在文档中也提到过。

在循环之后放置过滤条件:

 [v * 10 if v < 3 else v * 2 for v in L if v != 3]

回报

[0, 10, 20, 8, 10, 12]
    A=[[x*2, x*10][x <3] for x in L if x!=3]

这样做有什么不对

out = []
for v in L:
    if v < 3:
        out.append(v * 10)
    elif v > 3:
        out.append(v * 2)
    else:
        pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM