コース一覧
    Pythonループ・関数
    lambda関数

    Pythonループ・関数

    ループと関数の基本を学び、繰り返し処理を分割して読みやすく書けるようにします。

    1
    ループ
    01. forで合計15分
    02. whileで繰り返す15分
    03. rangeとstep15分
    04. breakとcontinue15分
    05. enumerateで番号付け15分
    06. zipで組み合わせ15分
    07. 入れ子ループ15分
    08. つくる:何件でも記録15分
    09. 第5章クイズ10分
    2
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. デフォルト引数15分
    04. キーワード引数15分
    05. 複数の戻り値15分
    06. divmod15分
    07. 変数のスコープ15分
    08. lambda関数15分
    09. つくる:関数に分割15分
    10. 第6章クイズ10分

    lambda関数

    lambda 式

    辞書のリストは、そのままでは並べ替えられない

    sorted はリストを並べ替えた新しいリストを返す組み込み関数です。数値や文字列のリストなら、渡すだけで並びます。

    Python

    print(sorted([300, 120, 250]))

    [120, 250, 300] が出ます。ところが、おこづかい帳の記録は辞書のリストです。辞書どうしをどう比べればいいのか Python には分からないので、そのまま渡すと TypeError になります。

    「金額を見て並べてほしい」という指示を、こちらから渡す必要があります。

    何を見て並べるかを、関数で渡す

    sorted には key というキーワード引数があります。ここに関数を渡すと、その関数が返した値を見て並べ替えてくれます。

    Python

    words = ["みかん", "パン", "たまご"]
    print(sorted(words, key=len))

    文字数の少ない順に並びます。渡すのは 関数そのもの です。key=len(words) のようにかっこを付けて呼んでしまうと、返ってきた数値を関数として使おうとして TypeError になります。

    len のような出来合いの関数で足りないときは、その場で小さな関数を書きます。それが lambda です。

    Python

    double = lambda x: x * 2
    print(double(4))
    
    print(sorted([12, 7, 20], key=lambda n: n % 10))

    8 と [20, 12, 7] が出ます。下は「10 で割った余り」の小さい順に並べたものです。lambda のうしろに引数、半角コロンのうしろに返す値を書きます。return は書きません。書いた式の値が、そのまま戻り値になります。引数には、sorted が 1 件ずつ渡してくれます。

    解説

    lambda は「その場かぎりの、名前を付けるほどでもない関数」を書く道具です。何行も書きたくなったら、素直に def を使います。

    sort は None を返す

    sorted は新しいリストを返し、渡したリストはそのままです。前回の考え方どおり、元を壊さない関数は安心して使えます。

    紛らわしいのが records.sort() のほうで、こちらは元のリストを並べ替えて None を返します。新しいリストが欲しいのに sort を使うと、戻り値が None になって落ちます。戻り値が None になっていたら、まずここを疑います。

    lambda の中に return を書くと SyntaxError です。lambda は文ではなく式なので、返す値だけを書きます。

    並べ替えの規則を関数として外から渡せる、という考え方は Python のあちこちで出てきます。並べ替えの基準が同じ値どうしは元の順番が保たれる点も、覚えておくと役に立ちます。

    やってみよう

    関数 sort_by_price(records) を実装してください。支出のリスト records を、金額 price の 小さい順 に並べ替えた新しいリストを return します。

    sorted の key に lambda を渡し、1 件から金額を取り出して返すようにします。辞書からの取り出しは record["price"] の形です。

    records が空のリストのときは空のリストが返ります。手元では並べ替えたあとに元の records を表示して、順番が変わっていないことも確かめてみてください。

    要件

    1. 関数名は sort_by_price で、引数はリスト records の 1 つ
    2. 金額 price の小さい順に並べ替える
    3. sorted の key に lambda を渡して並べ替えの基準を指定する
    4. 元の records を書き換えず、新しいリストを返す

    ヒント

    sorted(records, key=...) の形で並べ替えます

    key に渡すのは lambda r: r["price"] です

    lambda に return は書きません。コロンのうしろの式が戻り値になります

    records.sort() は None を返すので、この課題では sorted を使います

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

    関連レッスン

    • つくる:関数に分割

      第6章の総仕上げ。件数・合計・残額・予算オーバー判定を辞書で返す summarize を作る

    • 第6章クイズ

      関数の定義と呼び出し、デフォルト引数、複数の戻り値、スコープ、lambda を5問で確認する

    • 変数のスコープ

      ローカル変数とグローバル変数の違い。外を書き換えるバグを引数と戻り値の形に直す

    • divmod

      divmod で商と余りを 1 回の呼び出しで得る。割り勘の結果を返す split_even を作る

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

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

    • リスト順序付きで複数の値を扱うデータ構造
    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    • None「値がない」ことを表す特別な値。
    • lambda名前のない小さな関数を1行で定義する記法。
    main.py
    エディタを読み込んでいます

    メモ

    lambda関数

    ⌘S で保存