1. 食費の2件だけが元の順番で返る
  2. 食費が1件も無いときは空リストが返る
  3. 空リストのときは空リストが返る
  4. 全部が食費のときは全件が返る
  5. 0円の食費も条件に合えば取り出す
コース一覧
Python入門:基礎文法編
リスト内包表記

Python入門:基礎文法編

変数、条件分岐、ループ、関数、リスト・辞書、ファイル操作など Python の基礎文法を、ブラウザ上で毎レッスン実際にコードを書き、自分だけの「おこづかい帳アプリ」を育てながら学べる無料コースです。プログラミング完全未経験から始められ、環境構築や事前知識は一切不要です。約 18 時間 (1 日 30 分 × 37 日) で 74 レッスンを修了でき、修了後は入力・集計・ファイル保存まで備えたスクリプトを1から書けるようになります。

1
はじめての Python
01. printで表示15分
02. 文字列の連結15分
03. 四則演算15分
04. 実行順序15分
05. コメント15分
06. エラーを読んでみる15分
07. つくる:レシート表示15分
08. 第1章クイズ10分
2
変数とデータ型
01. 変数15分
02. typeで型を調べる15分
03. 数値への変換15分
04. 文字列への変換15分
05. boolとNone15分
06. f-string15分
07. 入力を受け取る15分
08. つくる:入力できるおこづかい帳15分
09. 第2章クイズ10分
3
演算子と式
01. 比較演算子15分
02. 論理演算子15分
03. in演算子15分
04. 剰余と切り捨て除算15分
05. 連鎖比較と優先順位15分
06. 三項演算子15分
07. つくる:予算チェック15分
08. 第3章クイズ10分
4
条件分岐
01. if文の基本15分
02. if / elif / else15分
03. 条件の組み合わせ15分
04. match文15分
05. 定番:FizzBuzz判定15分
06. デフォルト値とor15分
07. つくる:カテゴリ自動判定15分
08. 第4章クイズ10分
5
ループ
01. forで合計15分
02. whileで繰り返す15分
03. rangeとstep15分
04. breakとcontinue15分
05. enumerateで番号付け15分
06. zipで組み合わせ15分
07. 入れ子ループ15分
08. つくる:何件でも記録15分
09. 第5章クイズ10分
6
関数
01. 関数を定義する15分
02. 引数と戻り値15分
03. デフォルト引数15分
04. キーワード引数15分
05. 複数の戻り値15分
06. divmod15分
07. 変数のスコープ15分
08. lambda関数15分
09. つくる:関数に分割15分
10. 第6章クイズ10分
7
リストと辞書
01. リストの追加と削除15分
02. スライス15分
03. 辞書の基本15分
04. 辞書を走査15分
05. keyでソート15分
06. setで重複除去15分
07. リスト内包表記15分
08. タプルアンパック15分
09. つくる:カテゴリ別集計15分
10. 第7章クイズ10分
8
ファイルとエラー処理
01. ファイルを読み込む15分
02. ファイルに書き込む15分
03. withで安全に扱う15分
04. CSV形式で保存15分
05. try-exceptで備える15分
06. 例外の種類15分
07. つくる:保存機能15分
08. 第8章クイズ10分
9
総合制作
01. 全機能を統合しよう15分
02. 月間レポート機能15分
03. 自由拡張15分
04. 完成と次のステップ10分

リスト内包表記

内包表記は同じことを1行で書ける

「入れ物を作る、回す、入れる」を毎回書いている

条件に合うものだけを取り出す処理は、これまでの書き方だと必ず 4 行になります。

Python

result = [] for record in records: if record["price"] >= 1000: result.append(record)

やっているのは「入れ物を作る」「回す」「合えば入れる」の 3 つで、条件のところ以外は毎回まったく同じです。この決まりきった形を 1 行に畳める記法が リスト内包表記 です。

Python

result = [record for record in records if record["price"] >= 1000]

角かっこの中に for があるのが目印で、上の 4 行と同じ結果になります。短く書けるから偉いのではありません。角かっこを見た瞬間に「新しいリストを作っている」と伝わるところに価値があります。

左に何を書くかで、返るものが変わる

内包表記は 3 つの部品でできています。

Python

[ 式 for 変数 in もとのリスト if 条件 ]

読む順番は書いてある順とは違います。まず for で何を回すかをつかみ、次に if で絞り込み、最後にいちばん左の 式 で「何を入れるか」を決めます。

この左の式が自由なところが要です。変数をそのまま書けば要素がそのまま入り、r["price"] のように書けば金額だけのリストになります。

Python

names = [r["name"] for r in records] prices = [r["price"] for r in records if r["price"] >= 1000]

1 つ目は全件の品名、2 つ目は 1000 円以上の金額です。if は書かなくても構いません。

元のリストは変わりません。内包表記も、スライスや sorted と同じ「新しく作って返す」仲間です。

if を左に書くと、別の意味になる

つまずきやすいのが if の位置です。絞り込みの if は for の うしろ に書きます。

Python

[r["name"] if r["price"] >= 1000 else "-" for r in records]

こちらは第 3 章の三項演算子で、件数は減りません。条件に合わないものを捨てるのではなく、入れる値を切り替えているだけです。件数が変わってほしいのに変わらないときは、if の位置を疑います。

もう 1 つ、内包表記の中に append は書きません。[result.append(r) for r in records] と書くと、append の戻り値である None が並んだリストができます。入れる仕事は角かっこがやってくれます。

やってみよう

関数 only_food(records) を実装してください。支出の辞書が並んだリストから、category が "食費" のものだけを集めた新しいリストを return します。

リスト内包表記で 1 行で書いてください。取り出すのは金額や品名ではなく 辞書そのもの です。元の並び順は変えず、条件に合うものが 1 件も無いときや空リストのときは空リスト [] を返します。

要件

  1. 関数名は only_food で、引数は records の1つ
  2. リスト内包表記を使って新しいリストを作る
  3. category が "食費" の辞書だけを、辞書のまま取り出す
  4. 元の並び順を保ち、該当が無いときは空リストを返す

入出力例

only_food([{"category":"食費","name":"りんご","price":120},{"category":"日用品","name":"ノート","price":200},{"category":"食費","name":"牛乳","price":180}]) → [{"category":"食費","name":"りんご","price":120},{"category":"食費","name":"牛乳","price":180}] only_food([{"category":"娯楽","name":"映画","price":1800},{"category":"交通費","name":"電車代","price":320}]) → [] only_food([]) → [] only_food([{"category":"食費","name":"りんご","price":120},{"category":"食費","name":"牛乳","price":180}]) → [{"category":"食費","name":"りんご","price":120},{"category":"食費","name":"牛乳","price":180}] only_food([{"category":"食費","name":"試供品","price":0},{"category":"日用品","name":"ペン","price":150}]) → [{"category":"食費","name":"試供品","price":0}]

ヒント

[record for record in records if 条件] の形です

条件は record["category"] == "食費" と書きます。= を1つにしないよう注意します

左の式は record です。record["name"] にすると品名のリストになってしまいます

絞り込みの if は for のうしろに書きます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

関連レッスン

  • タプルアンパック

    2つの値の組を変数に分解して受け取り、品名と金額を1行の文字列にまとめる

  • つくる:カテゴリ別集計

    第7章の総仕上げ。支出をカテゴリごとに合計した辞書を返す total_by_category を作る

  • 第7章クイズ

    リストのメソッド、スライス、辞書のキー、set、内包表記の理解を5問で確認する

  • ファイルを読み込む

    open と read でテキストファイルを読み込み、splitlines で行のリストに変える

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 処理計算や代入を表す長方形
  • リスト順序付きで複数の値を扱うデータ構造
  • リスト内包表記リストを1行で生成する書き方。
  • 内包表記for と if を 1 行で書く構文
  • 変数データに名前をつけて参照する仕組み
  • スライス範囲指定で部分列を取り出す記法
  • 三項演算子値1 if 条件 else 値2 の形式。
  • 演算子//は切り捨て除算(7 // 2 = 3)。
main.py
学習モード
エディタを読み込んでいます

メモ

リスト内包表記

⌘S で保存