hakeの日記

Windows環境でプログラミングの勉強をしています。

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)