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 。 次に、数値num1num2を取り、それらの合計num1 + num2を返す別の単純な関数add()を書き直してみましょう。

 def add(num1,num2): return num1 + num2

2 つの数値を引数としてadd()関数を呼び出しましょう。

 >>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18

この場合、 num1num2は 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 内の各項目に関数を適用します。

python-ラムダ-with-map

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 反復可能オブジェクトにキャストできます。

python-ラムダ-with-filter

すべての偶数を除外するために、奇数のみを保持します。 したがって、ラムダ式は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 と関数を受け取ります。 イテラブルのアイテムに関数を繰り返し適用することにより、イテラブルを減らします。

python-ラムダ-ウィズ-リデュース

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()メソッドを使用できます。 そのため、 keylambda 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 の項目が価格です。 したがって、 keylambda 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 でフロア分割を実行する方法を学習します。