LaTeX957931 views
高校生物550093 views
りんご195339 views
MathPython492451 views
雑学1472774 views
ヒストリア285028 views
英語608783 views
中学社会667316 views
Computer365661 views
いろは2990632 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 つの値から別の値を求める関数をリストに適用したいときに使う。