2017-04-05 126 views
-2

下面代碼中錯誤的語法是什麼?這條線不應該工作嗎?有人可以解釋爲什麼它不工作,什麼是正確的語法。Python一行if else

return [ True for x in numbers if x == 3 else False ] 
+2

'for'後面的'if'是**用於過濾**。 –

+0

它不工作,因爲語法錯誤。解決方案是查找語法。 – timgeb

+1

'如果... else'應... 或者使用'[X == 3對數x]是前''for'足夠 – LoicM

回答

1

你只需要

[ x == 3 for x in numbers ] 

這將遍歷每個元素numbers並將其與3,返回True或每個元素的False。 (請注意,有沒有必要使用if...else結構時,你只返回TrueFalse==運營商已經做到這一點。)

例如:

>>> numbers = [ 1, 2, 3, 4, 5 ] 
>>> [ x == 3 for x in numbers ] 
[False, False, True, False, False] 

你的語法不正確,因爲if語句之後的for循環在列表生成器中用於過濾元素。例如:

>>> [ True for x in numbers if x == 3 ] 
[True] 

在這種情況下,不符合標準if x == 3元件不包括在輸出的。

+0

在特定情況下,這可以替代。但這種方法是有限的只有一個二進制值,而不是在一個列表生成三元操作符的替代品。 –

0

,如果你需要使用列表生成三元運算符:

[ True if x == 3 else False for x in numbers ] 
+0

「*有人可以解釋爲什麼它不工作,... *「這是怎麼回答這個問題? –

+0

這解決了一個列表生成使用三元運營商的問題。而且它不爲明顯的原因工作,在發電機的條件被用作過濾器,但其間插入三元運算 –

+0

如果它是一個明顯的* *理由,那麼爲何OP要求是什麼? –