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

    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分

    reduce

    このレッスンでできるようになること。functools.reduce を使って、リストを1つの値へ畳み込む集計を書けるようになります。

    map は全部を変換し、filter は一部を残しました。reduce は「たくさんの値を1つにまとめる」道具です。左から順に2つずつ関数へ渡し、その結果を次の計算へ持ち回ります。標準の組み込み関数ではないので、使う前に import します。

    Python

    from functools import reduce
    
    amounts = [220, 640, 1280]
    total = reduce(lambda acc, a: acc + a, amounts, 0)
    print(total)   # 2140

    第1引数の関数は、ここまでの計算結果 acc と次の要素を受け取り、新しい計算結果を返します。第3引数は初期値です。初期値を書いておくと、リストが空でもその値がそのまま返るので安全です。初期値を省くと空リストで TypeError になります。合計を出したいなら 0、掛け算なら 1 のように、その計算で「何もしていない状態」を初期値にします。

    単純な合計なら sum(amounts) のほうが速くて読みやすく、実務でもそちらを選びます。reduce が本当に効くのは、合計以外の畳み込みです。たとえば最も高い支出を選ぶ、カテゴリごとの集計辞書を1つずつ育てる、といった処理は sum では書けません。

    Python

    from functools import reduce
    
    expenses = [
        {"name": "牛乳", "amount": 220},
        {"name": "書籍", "amount": 2035},
    ]
    top = reduce(lambda acc, e: e if e["amount"] > acc["amount"] else acc, expenses)
    print(top["name"])   # 書籍

    金額は int で持っておくと、何度畳み込んでも桁が揺れません。

    要件

    1. functools から reduce を import する
    2. reduce に初期値 0 を渡して合計を畳み込む
    3. 空のリストを渡されたら 0 を返す

    ヒント

    reduce(lambda acc, e: acc + e["amount"], expenses, 0) の形になります

    初期値を書き忘れると空リストで TypeError になります

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

    関連レッスン

    • anyとall

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

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

      抽出から変換、集計までを高階関数でつないだ処理を組みます。

    • 第4章クイズ

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

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

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

    • リスト順序付きで複数の値を扱うデータ構造
    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    • 処理計算や代入を表す長方形
    main.py
    エディタを読み込んでいます

    メモ

    reduce

    ⌘S で保存