map、reduce、リスト内包表記

「言語は思考を規定する」とはよく言ったもので、特定のプログラミング言語ばかり使っていると、いつのまにかその枠内でしか考えられなくなってしまう。異なる言語に触れることで違う方向からの視点みたいなものがあることに気づいたりする。

今回 Python を少し触ってみた。

配列のそれぞれの要素に対して何か処理を行う場合、普通は for や foreach などでぐるぐるループするのが当然と思っていたが、Pythonによってその固定観念が覆された。


1〜10までの値を持つ配列に対し、それぞれの値を2倍にする。

>>> map(lambda x: x * 2, range(1, 11))
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]  ← これ結果

map という命令で第二引数の配列に対し、第一引数の関数を適用する。なんと1行で書けてしまう。lambda を使うことより適用する関数(この場合2倍にするという内容)を宣言なしで入れ込むことで短くなった。

さらに、配列の要素を走査して何らかの結果を求めたい場合は reduce という命令を用いる。
1〜10の合計値を求める。

>>>reduce(lambda a, b: a + b, range(1, 11))
55  ← これ結果

という具合。


さらに、リスト内包表記というのがあって、配列定義時に条件式を用いることができるというものなのだが、これを使うとさらに短くなる。


1〜10までの値を持つ配列に対し、それぞれの値を2倍にする。

>>> [x * 2 for x in range(1, 11)]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]  ← これ結果


Python なかなかやるじゃん、と見直しました。



※参考ページ
http://www.python.jp/doc/release/tut/
Python の map, filter, reduce とリスト内包表記 | すぐに忘れる脳みそのためのメモ