45
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python 2 と 3 での高階関数の使い方の比較

Posted at

Python を使うたびに,高階関数 (map,filter,reduce) の使い方を調べたりしているので,メモとして残しておきます.

また,最近 Python 3 の勉強を始めたのですが,Python 2 と 3 では書き方が多少異なるため,比較のために両方書いておきます.

そもそも高階関数が何かというと,関数を引数として受け取る関数のこと.
例えば,配列の各要素に対して,何らかの処理をしたいときなどに使うもの.

実行環境

  • Mac OS X Yosemite 10.10.2
  • Python 2.7.6
  • Python 3.5.1

map 関数

配列の全ての要素に対して処理をしたいときに使う.
以下の例では,配列の全ての要素を 2 倍して出力する.

  • Python 2
print map(lambda x: x * 2, range(1, 5))
  • Python 3
print (list(map(lambda x: x * 2, range(1, 5))))
  • 実行結果
[2, 4, 6, 8]

filter 関数

配列の中で条件にマッチした要素にのみ処理をしたいときに使う.
以下の例では,配列の要素から偶数のみを抽出する.

  • Python 2
print filter(lambda x: x % 2 == 0, range(1, 5))
  • Python 3
print (list(filter(lambda x: x % 2 == 0, range(1, 5))))
  • 実行結果
[2, 4]

reduce 関数

複数の要素を 1 つにまとめたいときに使う.
具体的には,配列の先頭から 2 つの要素を取り出して処理を行い,次はその結果とその次の要素に処理を行う,ということを繰り返す.

しかし,Python 3 では reduce 関数は Python のコア関数からはずされており,functools モジュールをインポートしないと使えなくなっている.

以下の例では,配列の全ての要素の合計を出す.

  • Python 2
print reduce(lambda x, y: x + y, range(1, 5))
  • Python 3
import functools

print (functools.reduce(lambda x, y: x + y, range(1, 5)))
  • 実行結果
10

Python 3 に慣れていないせいもあるが,Python 2 の方がシンプルに書けて良い,というのが個人的な感想…

参考資料

45
47
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?