mapとreduce

map

まずは標準的な使い方。

>>> map((lambda x: x ** 2), [1,2,3,4,5])
[1, 4, 9, 16, 25]

面白いのは、引数にリストを複数とれること。この場合、Haskell の zipWith 相当の動作をする。

>>> map((lambda x,y: x + y), [1,2,3,4,5], [10,20,30,40,50])
[11, 22, 33, 44, 55]

リスト3つでもいける。

>>> map((lambda x,y,z: x * y + z), [1,2,3,4,5], [6,7,8,9,10], [10,20,30,40,50])
[16, 34, 54, 76, 100]

いくつまでいけるのかは確認してない。

reduce

mapときたらreduce。injectでもfoldlでもなくreduce。何でこう、畳み込み関数って言語によって名前が違うんだろう。

>>> reduce((lambda x,y: x * y), [1,2,3,4,5], 1)
120

第3引数は省略可能で、そのときはリストの最初の値が初期値になるみたい。

>>> reduce((lambda x,y: x * y), [1,2,3,4,5])
120

この例の場合だと結果は同じだ。

追記:こういう例のほうが初期値の有無による動作の違いがわかりやすい:

>>> reduce((lambda x,y: (x,y)), [1,2,3,4,5], 0)
(((((0, 1), 2), 3), 4), 5)
>>> reduce((lambda x,y: (x,y)), [1,2,3,4,5])
((((1, 2), 3), 4), 5)

「mapとreduce」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください