lambda, map, reduce, itemgetter in python

備忘録。

  • lambda ... temporal functionとして使える
In [1]: temporal_function = lambda x: x+1
In [2]: temporal_function(1)
Out[2]: 2
In [3]: temporal_function(10)
Out[3]: 11

  • map ... listなどのsequenceに対して個別に関数を適用する。lambdaとの合わせ技でお世話になる。
In [7]: myList = [2,4,6,8]
In [8]: map(lambda x: x**2, myList)
Out[8]: [4, 16, 36, 64]

list comprehensionと似たようなもの、、、? 複数の変数がある場合はmapの方が直感的に書けるかもしれません。
In [9]: [x**2 for x in myList]
Out[9]: [4, 16, 36, 64] 

  • reduce ... 見た目はmapに似ているけれど、listなどのsequenceに対して順番に関数を適用し更新していく。+=, *= のようなイメージ。
In [13]: reduce(lambda x, y: x+y, myList)
Out[13]: 20
In [14]: myList = [1,2,3,4,5]
In [15]: reduce(lambda x, y: x+y, myList)
Out[15]: 15
In [16]: reduce(lambda x, y: x*y, myList)
Out[16]: 120
In [17]: reduce(lambda x, y: max(x, y), myList)
Out[17]: 5
In [18]: reduce(lambda x, y: min(x, y), myList)
Out[18]: 1
sum、product、maxとかDPのsemiring等に使える、、、はず。

  • itemgetter ... list comprehensionで代用可能なので多分使わない。
In [45]: map(itemgetter(1), myList)
Out[45]: [1, 3, 5]
In [46]: myList = [('p', 1), ('q', 3), ('r', 5)]
In [47]: map(itemgetter(0), myList)
Out[47]: ['p', 'q', 'r']
In [48]: map(itemgetter(1), myList)
Out[48]: [1, 3, 5]

In [49]: [x[0] for x in myList]
Out[49]: ['p', 'q', 'r']
In [50]: [x[1] for x in myList]
Out[50]: [1, 3, 5]

タグ:

python
最終更新:2013年11月22日 04:44