if-else付き内包表記

このレッスンでできるようになること。条件によって値を出し分ける内包表記を書き、支出に高額フラグを付けたリストを作れるようになります。

前のレッスンの if は、末尾に置いて「残すかどうか」を決めるものでした。今回の if-else は置く場所が違います。角かっこの左側、つまり値を作る式の中に書きます。

labels = ["高額" if e["amount"] >= 3000 else "通常" for e in expenses]

この A if 条件 else B は条件式と呼ばれ、内包表記とは無関係にどこでも使える Python の式です。条件が真なら A、偽なら B が値になります。文ではなく式なので、変数への代入の右側にも、関数の引数にも置けます。

2つの if を混同しないために、位置で覚えるのが確実です。末尾の if は件数を減らすためのもので、else を付けられません。左側の if-else は件数を変えず、値だけを差し替えるものです。全件が結果に入るので、もとのリストと長さがそろいます。

家計簿では、金額そのものより「これは高いのか、いつも通りか」を並べて見たい場面がよくあります。品名とラベルを組にした辞書を作れば、そのまま一覧表示に使えます。

[{"name": e["name"], "label": "高額" if e["amount"] >= 3000 else "通常"} for e in expenses]

しきい値を関数の引数で受け取る形にしておくと、月ごとに基準を変えて見直せます。数字を式の中に直接書き込むと、あとから変えるときに書き換え漏れが起きるので、判断の基準になる数値は引数か変数に出しておくのが安全です。

なお、両方の if を1つの内包表記に置くこともできます。その場合は左に if-else、末尾に if を書きますが、読みにくくなりやすいので、迷ったら2段に分けて書いてください。

要件

  1. 内包表記の中で A if 条件 else B の形を使うこと
  2. 返す辞書のキーは name と label の2つにすること
  3. しきい値ちょうどの金額は 高額 として扱うこと

入出力例

add_flag([{"amount":3200,"category":"食費","date":"2026-06-03","name":"スーパー"},{"amount":480,"category":"交通費","date":"2026-06-05","name":"電車代"},{"amount":3000,"category":"教養費","date":"2026-06-12","name":"書籍"}], 3000)[{"label":"高額","name":"スーパー"},{"label":"通常","name":"電車代"},{"label":"高額","name":"書籍"}] add_flag([{"amount":3200,"category":"食費","date":"2026-06-03","name":"スーパー"},{"amount":480,"category":"交通費","date":"2026-06-05","name":"電車代"}], 5000)[{"label":"通常","name":"スーパー"},{"label":"通常","name":"電車代"}]

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
学習モード

メモ

if-else付き内包表記

⌘S で保存