次の章:リスト理解
ラムダ、フィルタ、削減とマップ
ラムダ演算子
それのようないくつかは、他の人がそれを嫌い、多くはラムダ演算子を恐れています。 このようにまlikeitきが完了してこの章のチュートリアルです。, そうでない場合は、”リスト内包表記”についてすべてを学ぶことができますが、Guido van RossumsはLambda、map、filter、reduceのどちらも好きではないので、それを行う方法を好みます。
ラムダ演算子またはラムダ関数は、小さな無名関数、つまり名前のない関数を作成する方法です。 これらの関数は捨てられた関数であり、すなわち、作成された場所で必要とされるだけです。ラムダ関数は、主に関数filter()、map()、reduce()と組み合わせて使用されます。Lispプログラマからの要求により、lambda機能がPythonに追加されました。,
ラムダ関数の一般的な構文は非常に簡単です:
ラムダargument_list:expression
引数リストは、引数のコンマ区切りのリストと式で構成されていますこれらの引数 関数を変数に割り当てて名前を付けることができます。
ラムダ関数の次の例は、その二つの引数の合計を返します。
>>> f = lambda x, y : x + y>>> f(1,1)2
map()関数
ラムダ演算子の利点は、map()関数と組み合わせて使用,
map()は二つの引数を持つ関数です:
r = map(func, seq)
最初の引数funcは関数の名前であり、第二のシーケンス(例えばリスト)seqです。 map()は、シーケンスseqのすべての要素に関数funcを適用します。 Funcによって変更された要素を含む新しいリストを返します上記の例では、lambdaを使用していません。 Lambdaを使用することで、関数fahrenheit()とcelsius()を定義して名前を付ける必要はありませんでした。 これは次の対話セッションで確認できます。map()は複数のリストに適用できます。 リストの長さは同じでなければなりません。, つまり、最初に0番目のインデックスを持つ要素に適用され、次に1番目のインデックスを持つ要素に適用されます。
>>> a = >>> b = >>> c = >>> map(lambda x,y:x+y, a,b)>>> map(lambda x,y,z:x+y+z, a,b,c)>>> map(lambda x,y,z:x+y-z, a,b,c)
上記の例では、パラメータxはリストaから値を取得し、yはリストcからbとzの値を取得することがわかります。
フィルタリング
関数filter(function,list)は、aのすべての要素をフィルタリングするエレガントな方法を提供します。関数functionがtrueを返すリスト。
関数filter(f,l)は、最初の引数として関数fを必要とします。, fは、ブール値、つまりtrueまたはFalseのいずれかを返します。 この関数は、リストlのすべての要素に適用されます。fがTrueを返す場合にのみ、リストの要素が結果リストに含まれます。
リストを減らす
関数reduce(func,seq)は、関数func()をシーケンスseqに継続的に適用します。 これは、asingle値を返します。, div id=”43bad1e6ad”>
次の図は、計算の中間ステップを示しています。
reduce()の例
reduceを使用して数値のリストの最大値を決定します。
>>> f = lambda a,b: a if (a > b) else b>>> reduce(f, )102>>>
1から100までの数値の合計を計算する:
>>> reduce(lambda x, y: x+y, range(1,101))5050
次の章:リスト理解