[英]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.