コース一覧
    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分

    つくる 集計のリファクタ

    このレッスンでできるようになること。第2章で for 文で書いた集計3つを、内包表記とジェネレータ式に書き直し、同じ結果になることを確かめられるようになります。

    新しい文法はここでは出てきません。使うのは、この章で覚えたリスト内包表記、辞書内包表記、set 内包表記、ジェネレータ式の4つだけです。動いているコードを、結果を変えずに読みやすい形へ直す作業をリファクタリングと呼びます。中級で身に付けたい大事な技術のひとつです。

    書き直すのは、家計簿の月次レポートが使っている次の3つの集計です。

    1. 月ごとの合計金額を出す処理。月をキー、合計を値とする辞書を作ります
    2. これまでに使ったカテゴリの一覧を出す処理。重複を落として並べます
    3. 全期間の総額を出す処理。月ごとの合計を足し上げます

    第2章では、それぞれ空の入れ物を用意してから for でまわして詰めていました。1は辞書内包表記、2は set 内包表記と sorted、3はジェネレータ式と sum が、そのまま当てはまります。

    リファクタリングで気をつけるのは、結果を変えないことです。手順としては、書き直す前の結果をひかえておき、書き直したあとに同じデータを流して見比べる、という進め方が安全です。今回はテストケースがその役割を果たします。

    3つの結果は、別々に返すよりも1つの辞書にまとめたほうが、レポート側から使いやすくなります。キーの名前は中身がわかるものにしてください。呼び出す側は、キーを見るだけで何が入っているか判断できるようになります。

    書き終えたら、行数がどれだけ減ったかを数えてみてください。短くなること自体が目的ではありませんが、処理の意図が1行で読み取れるようになったかどうかは、良いリファクタリングかを判断する目安になります。

    要件

    1. monthly_total は辞書内包表記で作り、月をキー、その月の金額の合計を値にすること
    2. categories は set 内包表記で重複を落とし、sorted でリストにすること
    3. grand_total は sum とジェネレータ式で求めた整数にすること
    4. for 文と append による組み立てを残さないこと

    ヒント

    monthly.items() を使うと、月とその支出リストを同時に受け取れます

    grand_total は monthly_total.values() を足し上げると短く書けます

    set のまま返すと並び順が決まりません。必ず sorted を通します

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

    関連レッスン

    • 第3章クイズ

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

    • 関数はオブジェクト

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

    • ジェネレータ式

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

    • set内包表記

      set 内包表記で、重複のない利用カテゴリ一覧を作ります。

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

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

    • 内包表記for と if を 1 行で書く構文
    • リスト順序付きで複数の値を扱うデータ構造
    • リスト内包表記リストを1行で生成する書き方。
    • 処理計算や代入を表す長方形
    • テストバグを見つける工程
    • 判断YES/NO 分岐を表す菱形
    main.py
    エディタを読み込んでいます

    メモ

    つくる 集計のリファクタ

    ⌘S で保存