Python の高階関数 reduce で最大公約数を求める
functools の reduce は「2 つの値から別の値を求める関数」をリストに適用します。複数個の整数から最大公約数を求めるコードはこうなります。
from functools import reduce
from math import gcd
numbers = [24, 60, 90]
divisor = reduce(gcd, numbers)
print(divisor)
# 6reduce(gcd, numbers) は
- numbers から最初の 2 つ(24、60)をとる
- それを gcd する
- その値と numbers の次の要素(90)を gcd する
- 以下くりかえし…
を意味します。
応用:総和
from functools import reduce
def add(x, y):
return x + y
numbers = [1, 2, 3, 4, 5]
total = reduce(add, numbers)
print(total)注意:型
reduce を使うときは「適用する関数の返り値」と「リストの要素」の型は同じである必要があります。
from functools import reduce
def say(x, y):
return 'Hello'
numbers = [1, 2, 3, 4, 5]
total = reduce(say, numbers)
print(total)
# HelloHello が出力されているものの、reduce は誤って使われています。
reduce は 2 つの値から別の値を求める関数をリストに適用したいときに使う。












