Python で Lambda 関数を使用する方法 [例付き]
公開: 2022-11-10このチュートリアルでは、Python のラムダ関数について、ラムダ関数を定義する構文から、コード例を使用したさまざまなユース ケースまで、すべてを学習します。
Python では、ラムダは簡潔な構文を持つ無名関数であり、他の便利な組み込み関数と共に使用できます。 このチュートリアルの終わりまでに、ラムダ関数を定義する方法と、通常の Python 関数よりもラムダ関数の使用を検討する必要がある場合について学習します。
さぁ、始めよう!
Python Lambda 関数: 構文と例
Python でラムダ関数を定義する一般的な構文は次のとおりです。
lambda parameter(s):return value
上記の一般的な構文では:
- lambdaは、ラムダ関数を定義するために使用する必要があるキーワードであり、その後に関数が受け取る必要がある 1 つ以上のパラメーターが続きます。
- パラメータと戻り値はコロンで区切られています。
ラムダ関数を定義するときは、1 行のコードにまたがる式を評価することによって戻り値が計算されるようにする必要があります。 例をコーディングすると、これをよりよく理解できます。
Python Lambda 関数の例
ラムダ関数を理解する最善の方法は、通常の Python 関数をラムダ関数として書き直すことから始めることです。
Python REPL または Geekflare のオンライン Python エディターでコーディングできます。
#1 。 次の関数square()
を考えてみましょう。この関数は、数値num
を引数として取り、数値の 2 乗を返します。
def square(num): return num*num
引数を指定して関数を呼び出し、正しく機能していることを確認できます。
>>> square(9) 81 >>> square(12) 144
このラムダ式を変数名 (たとえば、 square1
) に割り当てて、関数の定義をより簡潔にすることができます: square1 = lambda num: num*num
そして、任意の数値を引数としてsquare1
関数を呼び出します。 ただし、ラムダは無名関数であるため、変数に代入することは避けてください。
関数square()
の場合、パラメーターはnum
で、戻り値はnum*num
です。 これらを特定したら、ラムダ式にプラグインして、次のように引数を付けて呼び出すことができます。
>>> (lambda num: num*num)(2) 4
これが、関数を定義した直後に呼び出す、即時呼び出し関数式の概念です。
#2 。 次に、数値num1
とnum2
を取り、それらの合計num1 + num2
を返す別の単純な関数add()
を書き直してみましょう。
def add(num1,num2): return num1 + num2
2 つの数値を引数としてadd()
関数を呼び出しましょう。
>>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18
この場合、 num1
とnum2
は 2 つのパラメーターであり、戻り値はnum1 + num2
です。
>>> (lambda num1, num2: num1 + num2)(3,7) 10
Python 関数は、パラメーターのデフォルト値を受け取ることもできます。 add()
関数の定義を変更して、 num2
パラメータのデフォルト値を 10 に設定しましょう。
def add(num1, num2=10): return num1 + num2
次の関数呼び出しでは:
- 最初の関数呼び出しでは、
num1
の値は 1 で、num2
の値は 3 です。関数呼び出しでnum2
の値を渡すと、その値が使用されます。 関数は 4 を返します。
- ただし、引数を 1 つだけ (
num1
が 7) 渡す場合、num2
にはデフォルト値の 10 が使用されます。 関数は 17 を返します。
>>> add(1,3) 4 >>> add(7) 17
特定のパラメーターのデフォルト値をラムダ式として受け取る関数を作成する場合、パラメーターを定義するときにデフォルト値を指定できます。
>>> (lambda num1, num2 = 10: num1 + num2)(1) 11
Python で Lambda 関数を使用する必要があるのはいつですか?
Python でのラムダ関数の基本を学習したので、いくつかの使用例を次に示します。
- 戻り式が 1 行のコードである関数があり、同じモジュール内の他の場所でその関数を参照する必要がない場合は、ラムダ関数を使用できます。 これを理解するために、いくつかの例をコーディングしました。
- map()、filter()、reduce() などの組み込み関数を使用する場合は、ラムダ関数を使用できます。
- Lambda 関数は、リストや辞書などの Python データ構造を並べ替えるのに役立ちます。
組み込み関数で Python Lambda を使用する方法
1. map() で Lambda を使用する
map()
関数は iterable と関数を受け取り、次のように iterable 内の各項目に関数を適用します。

nums
リストを作成し、 map()
関数を使用して、 nums
リスト内の各数値の 2 乗を含む新しいリストを作成しましょう。 二乗演算を定義するためにラムダ関数を使用していることに注意してください。
>>> nums = [4,5,6,9] >>> list(map(lambda num:num*num,nums)) [16, 25, 36, 81]
map()
関数は map オブジェクトを返すので、それをリストにキャストする必要があります。
️ Python の map() 関数に関するこのチュートリアルをご覧ください。
2. filter() で Lambda を使用する
数字のリストであるnums
を定義しましょう:
>>> nums = [4,5,6,9]
このリストをフィルタリングして、奇数のみを保持するとします。
Python の組み込みのfilter()
関数を使用できます。
filter()
関数は条件とiterableを受け取ります: filter(condition, iterable)
。 結果には、条件を満たす元の iterable の要素のみが含まれます。 返されたオブジェクトをリストなどの Python 反復可能オブジェクトにキャストできます。

すべての偶数を除外するために、奇数のみを保持します。 したがって、ラムダ式はlambda num: num%2!=0
である必要があります。 数量num%2
は、 num
を 2 で割った余りです。
-
num%2!=0
は、num
が奇数の場合は常にTrue
です。 -
num%2!=0
は、num
が偶数の場合は常にFalse
です。
>>> nums = [4,5,6,9] >>> list(filter(lambda num:num%2!=0,nums)) [5, 9]
3.reduce() で Lambda を使用する
reduce()
関数は iterable と関数を受け取ります。 イテラブルのアイテムに関数を繰り返し適用することにより、イテラブルを減らします。

reduce()
関数を使用するには、Python の組み込みfunctools
モジュールからインポートする必要があります。

>>> from functools import reduce
reduce()
関数を使用して、 nums
リスト内のすべての数値の合計を計算してみましょう。 ラムダ式を定義します: lambda num1,num2:num1+num2
を還元合計関数として定義します。
リダクション操作は次のように行われます: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. ここで、f はラムダ関数で定義された、リストの 2 つの項目の合計演算。
>>> from functools import reduce >>> nums = [4,5,6,9] >>> reduce(lambda num1,num2:num1+num2,nums) 24
並べ替えをカスタマイズする Python Lambda 関数
map()
、 filter()
、 reduce()
などの組み込み Python 関数でラムダ関数を使用することに加えて、それらを使用して、並べ替えに使用される組み込み関数とメソッドをカスタマイズすることもできます。

1. Python リストのソート
Python リストを操作する場合、特定の並べ替え基準に基づいて並べ替える必要があることがよくあります。 Python リストをその場でソートするには、組み込みのsort()
メソッドを使用できます。 リストのソートされたコピーが必要な場合は、 sorted()
関数を使用できます。
Python の
sorted()
関数を使用する構文はsorted(iterable, key=...,reverse= True | False)
です。
–key
パラメータは、並べ替えをカスタマイズするために使用されます。
–reverse
パラメータはTrue
またはFalse
に設定できます。 デフォルト値はFalse
です。
数値と文字列のリストを並べ替える場合、デフォルトの並べ替えはそれぞれ昇順とアルファベット順です。 ただし、ソート用のカスタム基準を定義したい場合もあります。
次のリストのfruits
を検討してください。 リストのソートされたコピーを取得したいとします。 'p' の出現回数に従って文字列を並べ替える必要があります (降順)。
>>> fruits = ['apple','pineapple','grapes','mango']
オプションのkey
パラメータを使用する時が来ました。 文字列は Python の iterable であり、文字列内の文字の出現回数を取得するには、組み込みの.count()
メソッドを使用できます。 そのため、 key
をlambda x:x.count('p')
に設定して、ソートが文字列内で「p」が発生する回数に基づくようにします。
>>> fruits = ['apple','pineapple','grapes','mango'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['pineapple', 'apple', 'grapes', 'mango']
この例では:
- ソートの
key
は、文字「p」の出現回数であり、ラムダ式として定義されています。 -
reverse
パラメータをTrue
に設定したので、ソートは「p」の出現回数の降順で行われます。
fruits
のリストでは、'pineapple' には 3 回の 'p' が含まれ、文字列 'apple'、'grapes'、'mango' にはそれぞれ 2 回、1 回、0 回の 'p' が含まれています。
安定ソートについて
別の例を考えてみましょう。 同じソート基準で、 fruits
のリストを再定義しました。 ここで、'p' は文字列 'apple' と 'grapes' にそれぞれ 2 回と 1 回出現します。 そして、文字列 'mango' と 'melon' では決して発生しません。
>>> fruits = ['mango','apple','melon','grapes'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['apple', 'grapes', 'mango', 'melon']
出力リストでは、'mango' が 'melon' の前に来ますが、どちらにも文字 'p' はありません。 しかし、なぜこれが事実なのですか? sorted()
関数は安定ソートを実行します。 したがって、「p」の数が 2 つの文字列で等しい場合、元のfruits
リストの要素の順序が保持されます。
簡単な演習として、
fruits
のリストで「マンゴー」と「メロン」の位置を交換し、同じ基準に基づいてリストを並べ替え、出力を観察します。
️ Python リストの並べ替えの詳細をご覧ください。
2. Python 辞書のソート
Python 辞書をソートするときにラムダを使用することもできます。 アイテムとその価格を含む次のディクショナリprice_dict
を検討してください。
>>> price_dict = { ... 'Milk':10, ... 'Honey':15, ... 'Bread':7, ... 'Candy':3 ... }
辞書のキーと値のペアをタプルのリストとして取得するには、組み込みの辞書メソッド.items()
を使用できます。
>>> price_dict_items = price_dict.items() dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])
Python では、すべてのイテラブル (リスト、タプル、文字列など) はゼロ インデックスに従います。 したがって、最初のアイテムはインデックス 0 にあり、2 番目のアイテムはインデックス 1 にあり、以下同様です。
ディクショナリ内の各アイテムの価格である値で並べ替えたいと思います。 price_dict_items
リストの各タプルでは、インデックス 1 の項目が価格です。 したがって、 key
をlambda x:x[1]
に設定します。これは、インデックス 1 の項目 (価格) を使用して辞書をソートするためです。
>>> dict(sorted(price_dict_items,key=lambda x:x[1])) {'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}
出力では、ディクショナリ アイテムは価格の昇順で並べ替えられています。価格が 3 単位の「Candy」から始まり、価格が 15 単位の「Honey」までです。
️ 詳細については、キーと値による Python 辞書の並べ替えに関するこの詳細なガイドをご覧ください。
まとめ
そして、あなたはそれを持っています! ラムダ関数を定義し、それらを他の Python 組み込み関数で効果的に使用する方法を学びました。 主な要点の概要は次のとおりです。
- Python では、ラムダは複数の引数を取り、値を返すことができる無名関数です。 この戻り値を生成するために評価される式は、1 行のコードである必要があります。 これらを使用して、小さな関数定義をより簡潔にすることができます。
- Lambda 関数を定義するには、構文lambda parameter(s): return valueを使用できます。
- 重要なユースケースには、
map()
、filter()
、reduce()
関数と一緒に使用したり、Python iterable の並べ替えをカスタマイズするためのキー パラメーターとして使用したりすることが含まれます。
次に、Python でフロア分割を実行する方法を学習します。