コース一覧
    Python内包表記・高階関数
    set内包表記

    Python内包表記・高階関数

    内包表記と高階関数を学び、データ変換を簡潔かつ意図どおりに表現できるようにします。

    1
    内包表記
    01. リスト内包表記と条件15分
    02. if-else付き内包表記15分
    03. 辞書内包表記15分
    04. set内包表記15分
    05. ジェネレータ式15分
    06. つくる 集計のリファクタ20分
    07. 第3章クイズ10分
    2
    高階関数
    01. 関数はオブジェクト15分
    02. map15分
    03. filter15分
    04. sortedとkeyの応用15分
    05. reduce15分
    06. anyとall15分
    07. つくる 抽出・変換パイプライン20分
    08. 第4章クイズ10分

    set内包表記

    このレッスンでできるようになること。set 内包表記を使って、重複のない利用カテゴリ一覧を1行で作れるようになります。

    第2章で作った月別のデータは、月をキー、その月の支出リストを値とする辞書でした。

    Python

    monthly = {
        "2026-06": [{"name": "スーパー", "amount": 3200, "category": "食費"}],
        "2026-07": [{"name": "コンビニ", "amount": 620, "category": "食費"}],
    }

    ここから「これまでに使ったカテゴリの一覧」が欲しくなります。同じカテゴリは何度も出てくるので、そのままリストにすると重複だらけになります。set は重複を自動的に落としてくれる集合の型なので、この用途にぴったりです。

    書き方は辞書内包表記とよく似ていて、波かっこの中にキーと値ではなく値を1つだけ書きます。

    Python

    categories = {e["category"] for e in expenses}

    月別の辞書から全件を見るときは、for を2つ並べます。左から順に外側のループ、内側のループになるので、月のリストを取り出してから、その中の支出を1件ずつ見る、という並びです。

    Python

    categories = {e["category"] for items in monthly.values() for e in items}

    ここで大事な注意があります。set には並び順がありません。同じコードを走らせても、表示される順番が前と違うことがあります。画面に出すときや、他の関数に渡して結果を比べるときは、必ず sorted() を通してリストに直してください。sorted はもとが set でも並んだリストを返します。

    重複を落とす目的が無いなら、set にする必要はありません。件数を数えたいときは第2章の Counter、順番を保ちたいときはリストのままが向いています。道具の役割で選んでください。

    要件

    1. 波かっこを使った set 内包表記で重複を落とすこと
    2. 全ての月の支出を対象にすること
    3. 返り値は sorted で並べ替えたリストにすること

    ヒント

    月ごとの支出リストは monthly.values() で取り出せます

    内包表記の中に for を2つ並べると、入れ子のループと同じ意味になります

    set のままだと並び順が決まりません。sorted を通してから返します

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

    関連レッスン

    • ジェネレータ式

      ジェネレータ式で合計を求め、リストを作らずに済ませます。

    • つくる 集計のリファクタ

      既存の集計ループ3つを内包表記に置き換えて、結果が変わらないことを確かめます。

    • 第3章クイズ

      内包表記の読み書きの理解を確認します。

    • 関数はオブジェクト

      関数を変数に入れて渡し、表示のしかたを差し替えます。

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

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

    • 内包表記for と if を 1 行で書く構文
    • リスト順序付きで複数の値を扱うデータ構造
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 関数処理に名前を付けて再利用できる単位
    main.py
    エディタを読み込んでいます

    メモ

    set内包表記

    ⌘S で保存