これは私がPython 2 で、、およびを操作するのfilter
にmap
慣れている方法です:reduce
>>> def f(x):
return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
>>> def cube(x):
return x*x*x
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
>>> def add(x,y):
return x+y
>>> reduce(add, range(1, 11))
55
ただし、これらはすべて Python 3 では機能しないようです。
>>> filter(f, range(2, 25))
<filter object at 0x0000000002C14908>
>>> map(cube, range(1, 11))
<map object at 0x0000000002C82B70>
>>> reduce(add, range(1, 11))
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
reduce(add, range(1, 11))
NameError: name 'reduce' is not defined
なぜ結果が異なるのでしょうか? Python 3 コードを Python 2 コードと同じように動作させるにはどうすればよいですか?
参照:Reduce() の問題は何でしょうか?変更をreduce
組み込みのままにするのではなく、標準ライブラリ モジュールに組み込むという具体的な動機。
見るPython 3.x で map() を使ってリストを返すについてのより具体的な回答については、 をご覧くださいmap
。
ベストアンサー1
変更内容については、Python 3.0 の新機能多くの変更が加えられているため、2.x から 3.x に移行するときは、これをよく読んでください。
ここでの回答全体はドキュメントからの引用です。
いくつかのよく知られた API はリストを返さなくなりました:
- [...]
- 削除されました
reduce()
。使用functools.reduce()
本当に必要な場合はそうします。ただし、99 パーセントの場合、明示的なfor
ループの方が読みやすくなります。- [...]