1. ホーム
  2. パイソン

[解決済み】1行リスト内包:if-elseの変形版

2022-04-05 06:50:48

質問

Pythonのリスト内包の構文についてなのですが。私は、与えられた範囲の奇数のリストを生成するリスト内包を持っています。

[x for x in range(1, 10) if x % 2]

これはフィルタを作るもので、ソースリストから偶数番号を削除します ( if x % 2 ). ここでif-then-elseのようなものを使いたいのですが。以下のコードは失敗します。

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "<stdin>", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax

Pythonにはif-elseのような式があります。

1 if 0 is 0 else 3

リスト内包の中で使うには?

どのように解決するのですか?

x if y else z は、各要素に対して返す式の構文です。したがって、あなたは必要です。

[ x if x%2 else x*100 for x in range(1, 10) ]

この混乱は、あなたが フィルタ は、最初の例ではそうですが、2番目の例ではそうではありません。2つ目の例では マッピング という3項演算子式を使って、それぞれの値を別の値に変換します。

フィルタで、必要です。

[ EXP for x in seq if COND ]

必要なフィルタなし。

[ EXP for x in seq ]

そして、2番目の例では、式はquot;complex"であり、それはたまたま、quot;complex"を含む。 if-else .