簡體   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