Posted at

高階関数(map, filter, reduce)


はじめに

未来電子テクノロジーでインターンをしている松井です。

ハッカーランクで高階関数が出てきたため調べました。

*プログラミング初心者であるため、内容に誤りがあるかもしれません。

もし、誤りがあれば修正するのでどんどん指摘してください。


高階関数とは

@may88seijiさんのJavaScript 高階関数を説明するよ「関数を引数、戻り値として扱う関数」とありました。

この言葉が1番わかりやすかったため、引用させてもらいました。

高階関数を使うことで変数や定数だけでなく、関数も引数として使えます。


高階関数(map, filter, reduce)について


1.map()

map()map(func, iterator)の形で使います。

各要素の絶対値を計算する処理を書きます。

numbers = [-8, 5, -1, 4, -9, 2]

print(list(map(abs, numbers)))
#[8, 5, 1, 4, 9, 2]

簡単な処理でないため、あまり役に立っているように見えませんが、

複雑な処理になると、非常に便利だそうです。


2.filter()

filter()はリストやタプルの要素の中で関数を適用させた後、

Trueとなるものだけイテレーターをして返します。

絶対値が3より大きい要素だけ返す処理を書きます。

numbers = [-8, 5, -1, 4, -9, 2]

print(list(filter(lambda x: abs(x) > 3, numbers)))
#[-8, 5, 4, -9]

ここで使った無名関数lambdaはこちらを参照してください。

ここでのlambdaは「絶対値が3より大きいときTrueを返す」関数です。


3.reduce()

reduce()はリストやタプルの要素を四則演算する関数です。

全ての要素を足し合わせる処理を書きます。

from operator import add

from functools import reduce

numbers = [-8, 5, -1, 4, -9, 2]
print(reduce(add, numbers))
# -7

addはpythonの演算子の「+」と同じ処理を行う関数です。

「+」はreduce()に渡せないため、addを使いました。

reduce()はpython3ではimportで持ってくることが必要です。