ホームページ >バックエンド開発 >Python チュートリアル >Pythonでの関数map()とreduce()の使用法
この記事では主にPythonのmap()関数とreduce()関数の使い方を紹介しています。コードはPython2.xバージョンに基づいていますので、必要な方は参考にしてください
Pythonにはmap()関数とreduce関数が組み込まれています。 () 機能。
Googleの有名な論文「MapReduce: Simplified Data Processing on Large Clusters」を読んでいれば、map/reduceの概念は大体理解できると思います。
まず地図を見てみましょう。 map() 関数は 2 つのパラメータを受け取り、1 つは関数、もう 1 つはシーケンスです。渡された関数をシーケンスの各要素に順番に適用し、結果を新しいリストとして返します。
たとえば、関数 f(x)=x2 があり、この関数をリスト [1, 2, 3, 4, 5, 6, 7, 8, 9] に適用したい場合、使用できるmap()は次のように実装されます:
次に、Pythonコードで実装します:
>>> def f(x): ... return x * x ... >>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
map()に渡される最初のパラメータは、関数オブジェクトであるfです。自体。
map() 関数を使わずにループを記述して結果を計算できると思うかもしれません:
L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) print L
確かにそれは可能ですが、上記のループコードから、一目で「put f を実行する」ことがわかります。 ( "x) はリストの各要素に作用し、新しいリストを生成します"?
つまり、map() は高階関数として実際に演算規則を抽象化するので、単純な f(x)=x2 を計算するだけでなく、あらゆる複雑な関数、たとえばすべての関数を計算することもできます。このリストでは、数値を文字列に変換します:
>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]) ['1', '2', '3', '4', '5', '6', '7', '8', '9']
必要なコードは 1 行だけです。
reduce の使い方を見てみましょう。 reduce は関数をシーケンス [x1, x2, x3...] に適用します。この関数は 2 つのパラメーターを受け取る必要があります。reduce はシーケンスの次の要素で結果の累積計算を続けます。
reduce( f) , [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
たとえば、シーケンスを合計するには、reduce を使用して実装できます:
>>> def add(x, y): ... return x + y ... >>> reduce(add, [1, 3, 5, 7, 9]) 25
もちろん、合計演算は Python の組み込み関数 sum() を使用して直接実行でき、reduce を使用する必要はありません。
しかし、シーケンス [1, 3, 5, 7, 9] を整数 13579 に変換したい場合は、reduce が便利です:
>>> def fn(x, y): ... return x * 10 + y ... >>> reduce(fn, [1, 3, 5, 7, 9]) 13579
この例自体はあまり役に立ちませんが、文字列 str もシーケンスです。上記の例を少し変更して、map() を使用すると、str を int に変換する関数を作成できます。
>>> def fn(x, y): ... return x * 10 + y ... >>> def char2num(s): ... return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] ... >>> reduce(fn, map(char2num, '13579')) 13579
str2int にまとめられた関数は次のとおりです。
def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] return reduce(fn, map(char2num, s))は、ラムダ関数を使用してさらに簡略化することもできます:
def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
def str2int(s): return reduce(lambda x,y: x*10+y, map(char2num, s))つまり、Python が int() 関数を提供しないと仮定すると、次のように自分で関数を書くことができます。文字列を整数関数に変換するだけで、数行のコードが必要になります。
演習
map() 関数を使用して、ユーザーが入力した非標準の英語名を、最初の文字が大文字、その他が小文字の標準名に変更します。入力: ['adam'、'LISA'、'barT']、出力: ['Adam'、'Lisa'、'Bart']。 Pythonが提供するsum()関数はリストを受け取って合計を計算することができます。リストを受け取って積を計算するためにreduce()を使用できるprod()関数を作成してください。以上がPythonでの関数map()とreduce()の使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。