いろは2986023 views
小学算数1194618 views
中学理科1626207 views
雑学1472593 views
中学社会667106 views
高校国語785655 views
MathPython491378 views
英語607877 views
ヒストリア284143 views
LaTeX957300 views
Help
Tools

English

Python の高階関数 reduce で最大公約数を求める

functools の reduce は「2 つの値から別の値を求める関数」をリストに適用します。複数個の整数から最大公約数を求めるコードはこうなります。

from functools import reduce
from math import gcd

numbers = [24, 60, 90]
divisor = reduce(gcd, numbers)

print(divisor)
# 6

reduce(gcd, numbers)

  1. numbers から最初の 2 つ(24、60)をとる
  2. それを gcd する
  3. その値と numbers の次の要素(90)を gcd する
  4. 以下くりかえし…

を意味します。

応用:総和

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)
# Hello

Hello が出力されているものの、reduce は誤って使われています。

reduce は 2 つの値から別の値を求める関数をリストに適用したいときに使う。