filter,map,reduceの使い方
タイトルの通り
先日のPyFukuoka#3でLTした高階関数について、ちょっとまとめて行こうかなと思うところです。 ついでに、LTで喋りきれなかったジェネレーターとか、内包表記とかもまとめていけたらいいなと思ったり。
まず手始めに、簡単なfilter,map,reduceについてまとめます。
注意
まとめてる内容はPython3での挙動になり、Python2とは書き方、返り値など異なります。
filter
イテレータを対象に、条件に一致する要素のみを抽出してイテレータとして返す。
#偶数を返す def is_even(val): if val % 2 == 0: return val</code> print(list(filter(is_even, range(1,10)))) >>> [2, 4, 6, 8] #Lambdaを使って書くと print(list(filter(lambda x: x % 2 == 0, range(1, 10)))) >>> [2, 4, 6, 8]
map
イテレータの全ての要素に対して同一の処理を適用し、イテレータとして返す。
#倍返しだ! def double(val): return val * 2</code> print(list(map(double, range(1,10)))) >>> [2, 4, 6, 8, 10, 12, 14, 16, 18] #Lambdaを使って書くと print(list(map(lambda x: x * 2, range(1, 10)))) >>> [2, 4, 6, 8, 10, 12, 14, 16, 18]
reduce
全ての要素をまとめていく。
import functools</code> #ひたすら足して返す def add(val1, val2): return val1 + val2 print(functools.reduce(add, range(1,10))) >>> 45 #Lambdaを使って書くと print(functools.reduce(lambda x, y:x + y, range(1,10))) >>> 45