コース一覧
    Python内包表記・高階関数
    つくる 抽出・変換パイプライン

    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分

    つくる 抽出・変換パイプライン

    このレッスンでできるようになること。この章で学んだ高階関数だけを組み合わせて、抽出から変換、並べ替え、集計までを一本の流れとして書けるようになります。新しい文法は出てきません。

    家計簿の集計は、たいてい同じ形をしています。まず必要な支出を絞り込み、次に扱いやすい形へ直し、最後に1つの答えへまとめる。この3段階を、それぞれ filter と map と reduce が担当します。段ごとに役割がはっきりしているので、後から条件を1つ足したいときも触る場所が1か所で済みます。

    Python

    picked = list(filter(lambda e: e["category"] == "食費", expenses))
    taxed = list(map(lambda e: {"name": e["name"], "amount": e["amount"] * 110 // 100}, picked))

    書くときの約束を3つ確認しておきます。1つめは、map と filter の結果を必ず list() に通すことです。中間の変数に map オブジェクトのまま入れておくと、2回目に使ったときには空になっていて、合計が 0 になるといった原因の分かりにくい不具合になります。

    2つめは、金額を int のまま持ち回ることです。税込計算に * 1.1 を使うと端数が float に化け、合計や比較の結果が環境によってぶれます。* 110 // 100 で int を保ちます。

    3つめは、並べ替えの key に重複しない値まで含めることです。同じ金額の支出が並ぶと順序が読み手には決まって見えないので、金額の次に品名を足して一意にします。

    仕上げに any で予算の見張りを足せば、抽出から判定までが高階関数だけでつながります。

    要件

    1. 抽出は filter、変換は map、合計は reduce を使う
    2. map と filter の結果は list に通してから次で使う
    3. 税込金額は amount * 110 // 100 で計算し int のまま扱う
    4. 並べ替えは金額降順、同額なら品名昇順にする
    5. 対象カテゴリが1件も無いときは names が空リスト、total は 0 になる

    ヒント

    税込に直した支出は {"name": ..., "amount": ...} の新しい辞書として作り直すと後が楽です

    sorted の key は (-e["amount"], e["name"]) のタプルにします

    has_expensive の判定は税込にしたあとの金額で行います

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

    関連レッスン

    • 第4章クイズ

      高階関数の使い分けの理解を確認します。

    • anyとall

      any と all で、予算超過が1件でもあるかを判定します。

    • reduce

      functools.reduce で畳み込み集計を書き、sum と比べます。

    • sortedとkeyの応用

      key にタプルを返して、カテゴリ順かつ金額降順に並べます。

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

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

    • 関数処理に名前を付けて再利用できる単位
    • 変数データに名前をつけて参照する仕組み
    • オブジェクトキーと値のペアで構造を作るデータ
    • リスト順序付きで複数の値を扱うデータ構造
    main.py
    エディタを読み込んでいます

    メモ

    つくる 抽出・変換パイプライン

    ⌘S で保存