以下のコードで間違った構文とは何ですか?このラインは機能しませんか?誰かがそれがうまくいかない理由と正しい構文が何であるかを説明することはできますか?Pythonの1行が他の場合
return [ True for x in numbers if x == 3 else False ]
以下のコードで間違った構文とは何ですか?このラインは機能しませんか?誰かがそれがうまくいかない理由と正しい構文が何であるかを説明することはできますか?Pythonの1行が他の場合
return [ True for x in numbers if x == 3 else False ]
をあなただけ
[ x == 3 for x in numbers ]
これはTrue
を返す、numbers
の各要素を反復して3
にそれを比較します必要各要素についてはFalse
です。 (あなただけTrue
とFalse
を返している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
を満たしていない要素は、すべての出力には含まれていません。
特定のケースでは、これが代用品になることがあります。しかし、この方法はバイナリ値によってのみ制限され、リストジェネレータの三項演算子に代わるものではありません。 –
リストジェネレータで三項演算子を使用して必要がある場合:
[ True if x == 3 else False for x in numbers ]
"*誰かがそれがうまくいかない理由を説明できますか? * "これはどのようにその質問に答えるのですか? –
これは、リストジェネレータで三項演算子を使用する問題を解決します。そして明らかな理由から、ジェネレータでは条件がフィルタとして使用されていますが、明らかに理由がある場合は、3進演算子 –
が挿入されています。なぜOPがそれを要求しますか? –
'for'の後の' if'は**フィルタリング**です。 –
構文が正しくないため動作しません。解決策は構文を調べることです。 – timgeb
'もし... else'が' for'の前になければならない... 代わりに、 '[x =数字のxは3]'で十分です。 – LoicM