望月の息抜き

在宅勤務の息抜きです。主にプログラミングについて書いていきたいと思います。

【Python】【10】reduce関数を使ってみよう

【記事の目標】

reduce関数を使ってみる

 

【作業手順】

1.reduce関数ってどんな時に使うの?

2.reduce関数の使い方

3.reduce関数を実際に使ってみよう

 

1.reduce関数ってどんな時に使うの?

例えば、[1, 2, 3, 4]というイテラブルに対して、

 全て加算したい→1+2+3+4=10

 全て乗算したい→1*2*3*4=24

という場合に利用します。

for文で繰り返し処理をしても良いですが、reduce関数を使うことで、ソースがよりシンプルになります。

 

2.reduce関数の使い方

reduce関数は、

 第1引数(必須):function(関数)

 第2引数(必須):iterable(イテラブル)

 第3引数(任意):initializer

を指定できます。

第3引数のinitializerは任意での設定になりますが、第2引数のiterableの先頭に設定されるものとなります。

デフォルト値のようなものですね。

reduce関数は、

 reduce(function, iterable, initializer)

の形で書くことが出来ます。

 

3.reduce関数を実際に使ってみよう

今回はpython3系の場合は、インポートが必要となります。

 from functools import reduce

これでreduce関数が使えるようになりました。

では、数字が入った配列を用意して、すべての要素に1を足す処理を書いてみましょう。

まず、数字の入った配列を定義します。

 args = [1, 2, 3, 4]

次に引数1と引数2を足したものを返却する関数を作成します。

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

では、最後にreduce関数を使って、要素全てを足し合わせてみましょう。

 result = reduce(add, args)
print(result)

それでは実行してみましょう。

f:id:fysker:20220110161647p:plain

要素全てを足した10が表示されていますね。

 

【補足】

・無名関数(ラムダ式)を使うともっとシンプルに

今回のようにすべての要素を足し合わせるだけの簡単な処理であれば、無名関数を使うともっとシンプルになります。

記載方法は以下のようになります。

 result = reduce(lambda a, b: a+b, args)

「3.」で作成した add の関数を書く必要はありません。

この記載だけですべての要素を足し合わせることができます。

 

・initializerに設定するとどうなるの?

今回の要素のデフォルト値として 5 を設定してみましょう。

 result = reduce(add, args, 5)

第3引数に 5 を設定して実行してみます。

f:id:fysker:20220110162041p:plain

計算結果は 15 となりました。

初めに第3引数の 5 が加算され、そこにすべての要素を加算した形になりましたね。

 

・iterableが空の場合はどうなるの?

第2引数のiterableが空の場合、エラーが出力されます。

「3.」で作成したmain.pyの定義した要素を空にして、

 args = []

実行してみます。

f:id:fysker:20220110162618p:plain

 

また、第3引数を入れてエラーを回避することもできます。

要素は空にしたまま、reduce関数の第3引数に 5 を設定します。

 result = reduce(add, args, 5)

これで実行してみましょう。

f:id:fysker:20220110162835p:plain

エラーは出力されずに、 5 という結果が表示されましたね。

 

 

今回は少し難しかったかもしれません。

足し算ではなく、引き算や掛け算にしてご自身で試してみるのも良いかと思います。

気分転換に関数を使ってみましたが、様々な場面で使えそうですね。