map(), filter()
pythonのmap(), filter()の使い方について。
map()
Definition : map(func, *iterables)
リストなどの全要素に関数を適用し、イテレータを作る。
もとのリストは保存され、非破壊的。
mapオブジェクトを生成するので、中身を見たければlist化など。
list1 = [1.7, 5.9, -3.68] m = map(int, list1) print(m) # <map object at 0x...> print(list(m)) # [1, 5, -3]
mapのかわりに内包表記でも書ける
list1 = [1.7, 5.9, -3.68] print([int(i) for i in list1]) # [1, 5, -3]
mapオブジェクトはイテレータ
list1 = [1.7, 5.9, -3.68] m = map(int, list1) print(next(m)) # 1 print(next(m)) # 5 print(next(m)) # -3
lambda関数も使える
m = map(lambda x:x**2, range(4)) print(list(m)) # [0, 1, 4, 9]
map()を使って相関係数を計算する
公式:
# correlation coefficient def corr(x, y): if len(x) != len(y): return "different length" sx = sum(x) sy = sum(y) sx2 = sum(map(lambda x:x**2, x)) sy2 = sum(map(lambda x:x**2, y)) sxy = sum(map((lambda x, y:x*y), x, y)) n = len(x) try: return (n*sxy-sx*sy)/((n*sx2-sx**2)*(n*sy2-sy**2))**0.5 except: return 0 x = [1, 2, 3] y = [5, 5, 6] print("相関係数:", corr(x, y)) # 相関係数: 0.8660254037844387
filter()
Definition : filter(function or None, iterable)
リストなどの全要素に関数を適用し、Trueのものだけのイテレータを作る。
もとのリストは保存され、非破壊的。
filterオブジェクトを生成するので、中身を見たければlist化など。
正の要素だけ選ぶ
list1 = [1.7, 5.9, -3.68] f = filter(lambda x:x>0, list1) print(list(f)) # [1.7, 5.9]
内包表記でも書ける
list1 = [1.7, 5.9, -3.68] f = filter(lambda x:x>0, list1) print(list(f)) # [1.7, 5.9]
関数をNoneにすると、Trueのものだけを選ぶ。
f = filter(None, range(4)) print(f) # <filter object at 0x...> print(list(f)) # [1, 2, 3]
filter()とは逆に偽の要素を選ぶ関数としてitertools.filterfalse()がある。