Edited at

内包表記における語順

More than 5 years have passed since last update.

stackoverflowのこちらの記事より。

if文を含んだ内包表記を書く際、elseを含むか否かで書く位置が変わります。

if単体の時は、ifはforの後に書きます:

>>> [x for x in [1,2,3,4,5,6,7,8,9] if x > 4]

[5, 6, 7, 8, 9]

しかしelseを含む場合には、if~elseが先になります:

>>> [x if x > 4 else 0 for x in [1,2,3,4,5,6,7,8,9]]

[0, 0, 0, 0, 5, 6, 7, 8, 9]

この違いは、別の記事によると、上の例ではifは内包表記の文法規則に則って処理されていますが、下の例ではif~elseがternary operation(三項演算子)として処理されている為(FAQによると2.5以降の実装)、だそうです。