2017-04-05 7 views
-2

以下のコードで間違った構文とは何ですか?このラインは機能しませんか?誰かがそれがうまくいかない理由と正しい構文が何であるかを説明することはできますか?Pythonの1行が他の場合

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

'for'の後の' if'は**フィルタリング**です。 –

+0

構文が正しくないため動作しません。解決策は構文を調べることです。 – timgeb

+1

'もし... else'が' for'の前になければならない... 代わりに、 '[x =数字のxは3]'で十分です。 – LoicM

答えて

1

をあなただけ

[ x == 3 for x in numbers ] 

これはTrueを返す、numbersの各要素を反復して3にそれを比較します必要各要素についてはFalseです。 (あなただけTrueFalseを返しているif...else構文を使用する必要がないことに注意してください==オペレータが既にを行います。。)例えば

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

これは、リストジェネレータで三項演算子を使用する問題を解決します。そして明らかな理由から、ジェネレータでは条件がフィルタとして使用されていますが、明らかに理由がある場合は、3進演算子 –

+0

が挿入されています。なぜOPがそれを要求しますか? –

関連する問題