目次
functools
前回、自作関数を使ってリストや辞書から条件を満たす要素を抽出するfilter関数を紹介しました。
【Python基礎】自作関数を使ってリストや辞書から条件を満たす要素を抽出するfilter関数
filter関数 前回、Pandasでisinと==を使って特定の値の要素を抽出する方法を紹介しました。 今回は自作関数を使ってリストや辞書から条件を満たす要素を抽出するfilter…
今回はfunctoolsのreduce関数を使ってリスト内の全要素の計算値を取得する方法を紹介します。
ここでいう計算値というのは全要素を足し算したり、引き算するといった一定の計算をリストの前から順番に行なっていくと得られる値のことです。
例えばリスト内の全要素を足し算する場合、reduce関数を使わず、for文で計算をするとこんな感じになります。
a_list = [1, 2, 3, 4, 5]
add_val = 0
for a_val in a_list:
add_val = add_val + a_val
print(add_val)
実行結果
15
今回はこういった計算をreduce関数を使っておこなってみます。
それでははじめていきましょう。
reduce関数
reduce関数を使うには「functools」の「reduce」をインポートします。
from functools import reduce
そして使い方は「reduce(自作関数, リスト)」です。
ここで自作関数が計算部分の関数で、要するに計算式を別途用意して、そこにリストの値を順次入れて計算して行くというわけです。
例えば足し算をするための自作関数はこんな感じになります。
def add_calc(a, b):
return a + b
この自作関数を使って、reduce関数でリストの要素を全部足し算するにはこんな感じです。
from functools import reduce
a_list = [1, 2, 3, 4, 5]
def add_calc(a, b):
return a + b
add_val = reduce(add_calc, a_list)
print(add_val)
実行結果
15
注意すべき点は自作関数の引数は2つで、3つ以上ではエラーとなります。
from functools import reduce
a_list = [1, 2, 3, 4, 5]
def add_calc(a, b, c):
return a + b + c
add_val = reduce(add_calc, a_list)
print(add_val)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[3], line 8
5 def add_calc(a, b, c):
6 return a + b + c
----> 8 add_val = reduce(add_calc, a_list)
10 print(add_val)
TypeError: add_calc() missing 1 required positional argument: 'c'
reduce関数の性質上、1回目は「リストの最初の要素」と「リストの2つ目の要素」を計算します。
次に「最初の要素と2つ目の要素の計算結果」と「3つ目の要素」を使って計算を行うということなので、引数は2つまでということなのでしょう。
こうなると結構簡単な計算で使いやすそうですが、その場合、自作関数としてlambda式を用いることも可能です。
from functools import reduce
a_list = [1, 2, 3, 4, 5]
add_val = reduce(lambda a, b: a + b, a_list)
print(add_val)
実行結果
15
次回はitertoolsの無限イテレータcount、cycle、repeatを紹介します。
ではでは今回はこんな感じで。
コメント