NameError:名前 'reduce'はPythonで定義されていません


187

Python 3.2を使用しています。これを試しました:

xor = lambda x,y: (x+y)%2
l = reduce(xor, [1,2,3,4])

そして、次のエラーが発生しました:

l = reduce(xor, [1,2,3,4])
NameError: name 'reduce' is not defined

reduceインタラクティブコンソールに印刷してみました-このエラーが発生しました:

NameError: name 'reduce' is not defined


reducePython 3.2 では本当に削除されますか?その場合、代替手段は何ですか?


3
@JBernardo、適切なツールは何ですか?
Sergey、2011

回答:


280

に移動しましたfunctools



6
@ IgnacioVazquez-Abramsで参照されている記事は、ほとんどのケースがより読みやすい方法で記述できる方法についていくつかの本当に良い点を示しています。私にとって、それは書面によるのですsum(item['key'] for item in list_of_dicts)
connorbode 2017年

194

あなたは付け加えられます

from functools import reduce

あなたが還元を使用する前に。


3
前のユーザーはすでに質問に回答しており、回答は彼の回答と同じです
Kathiravan Natarajan 2017

8

または、6つのライブラリを使用する場合

from six.moves import reduce

3

この場合、私は以下が同等であると信じています:

l = sum([1,2,3,4]) % 2

これの唯一の問題は、それが大きな数を作成することですが、たぶんそれは繰り返しの剰余演算よりも優れていますか?


繰り返しモジュロ演算は、数値を小さく保つのに役立つ場合に役立ちます。たくさんの数字を合計しない限り、数字を合計しても大きな数字は作成されないので、この場合は役に立ちません。特にそうしないと、ユーザー定義関数を繰り返し適用するよりもはるかに高速に実行できる組み込みのsum関数を使用できるためです
HackerBoss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.