コース一覧
    Pythonコレクション
    リスト内包表記

    Pythonコレクション

    リスト、辞書、集合、タプルなどのコレクションを学び、複数のデータを適切に扱えるようにします。

    1
    リストと辞書
    01. リストの追加と削除15分
    02. スライス15分
    03. 辞書の基本15分
    04. 辞書を走査15分
    05. keyでソート15分
    06. setで重複除去15分
    07. リスト内包表記15分
    08. タプルアンパック15分
    09. つくる:カテゴリ別集計15分
    10. 第7章クイズ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. 元の並び順を保ち、該当が無いときは空リストを返す

    ヒント

    [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問で確認する

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

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

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

    メモ

    リスト内包表記

    ⌘S で保存