St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

【Python3】 functools.reduceの使い方

こんにちは。

python2では標準の関数として実装されていたreduce関数ですが、python3では、functoolsのモジュールからインポートしないと使用できないようになりました。

今回はこのreduceについてまとめます。

◯reduce関数とは

reduceの主な目的は、複数の値を一つの値に縮約することにあります。map関数やfilter関数の用な感じで、関数を引数に取ることが出来る高階関数の一種です。

reduce関数では、第一引数に引数を2つ取る関数を指定し、第二引数にはイテラブルなオブジェクトを指定します。

具体的には、以下のとおりです。

  1. まず、引数を2つとるfuncと、リストsample_listを用意します
  2. reduce(func, sample_list) を呼び出すと、sample_listの最初の2つの要素に関数funcが適用されます(つまり、func(sample_list[0], sample_list[1])の用な感じ)
  3. 最初の2つの要素を使って計算された値をresult1とすると、今度はこの値とsample_list[2]をfuncは引数にとって、計算をします(つまり、func(result1, sample_list[[2]) の用な感じです)
  4. あとは、これが要素がなくなるまで繰り返します。

簡単ですね。

◯reduce関数の使い方

以下みたいな感じで使います。

from functools import reduce

def add(x, y):
    return x + y

a = [1, 2, 3, 4, 5,]
print(reduce(add, a))

# 出力
# 15


別にaddはlambdaにしても書けます。

次はlambdaを使ってみた例を示します。

from functools import reduce

a = [1, 2, 3, 4, 5,]
reduce(lambda x, y: x * y, a)

# 出力
# 120

以上です。

◯余談

んー、まぁなくてもいけるなぁとおもっちゃうのでこれあんまり使わないんですよね笑。でも一応メモしておきました。

それでは。