見出し画像

One Point of Python “map, filter, reduce 関数”

Python の初心者向けに、知っておけば得するちょっとした豆知識を提供したい。今回は、“map, filter, reduce 関数”について取り上げる。

map関数は第1引数の関数を第2引数のシーケンスの要素ごとに適用する。
以下の例にしめすようにfor文を使ったループを省略できる。第1引数の関数には当然lambda式が使える。

>>> ll = [0,1,2,3,4,5]
>>> mm = []
>>> for x in ll:
...    mm.append(x*2)
... 
>>> mm
[0, 2, 4, 6, 8, 10]
>>> nn = map(lambda x: x*2, ll)
>>> nn
[0, 2, 4, 6, 8, 10]

こんな使い方もできるので便利である。具体的には 1**2, 2**3, 3**4である。

>>> map(pow, [1,2,3],[2,3,4])
[1, 8, 81]

filter関数は第1引数の条件にあうものだけを抽出する。

>>> ll = []
>>> for x in range(10):
...    if x%2==0:
...      ll.append(x)
... 
>>> ll
[0, 2, 4, 6, 8]
>>> filter(lambda x: x%2==0, range(10))
[0, 2, 4, 6, 8]

reduce関数は第2引数のシーケンスの1番と2版の要素から第1引数の関数を実行しその結果と3番の要素に第1引数の関数を実行する...を最後の要素まで続ける。ちょっと分かりづらいが、総和を計算する場合は下記に示すようなコードで実行できる。reduce関数を使えば1行で記述できる。

>>> s = 0
>>> for x in [1,2,3,4]:
...    s += x
... 
>>> s
10
>>> reduce(lambda x,y:x+y, [1,2,3,4])
10
>>> import operator; reduce(operator.add, [1,2,3,4])
10

ここで紹介した関数は無くてもPythonの制御文で容易に代替えできる。
ただし関数プログラミングの視点からは積極的に利用したい。メリットとしてはコードが短くなり意味がわかりやすくなる。

#ビジネス #プログラミング #Python #線形代数 #数学 #AI #IT




この記事が気に入ったらサポートをしてみませんか?