python - 高階関数
filter - 要素を関数で評価した結果がTrueとなるものを返す
#coding: cp932 # Falseで無い要素を返す v = filter(None, ["", 0, 1, None]) print(v) # -> <filter object at 0x0000000D8E26A470> print(list(v)) # -> [1] # 偶数ならTrue def is_even(x): if x % 2: return False else: return True v = filter(is_even, [0,1,2,3,4,5]) print(list(v)) # -> [0, 2, 4]
map - 各要素に関数を適用した結果を返す
#coding: cp932 def twice(x): return x * 2 v = map(twice, [1,2,3]) print(list(v)) # -> [2, 4, 6]
reduce - 畳みこみ
rubyでいうところのinject。python2系では、import不要みたい。
#coding: cp932 from functools import reduce def add(x, y): return x + y v = reduce(add, [1,2,3,4,5], 0) print(v) # -> 15 def func(a, b): return "func(" + a +", " + b + ")" # 初期値省略時は、iterableの先頭要素が初期値になる v = reduce(func, ["a","b","c","d","e","f"]) print(v) # -> func(func(func(func(func(a, b), c), d), e), f)