2011-12-31 16 views
85

私はPython 3.2を使用しています。NameError:名前 'reduce'がPythonで定義されていません

NameError: name 'reduce' is not defined 


が本当にPythonの3.2で削除さreduceされます。このエラーを得た - インタラクティブコンソールにreduceを印刷しようとしました

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

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

となった次のエラー:これは試してみました?それが事実なら、代替は何ですか?

+3

@JBernardoを使用している場合は、適切なツールは何ですか? – Sergey

答えて

139

functoolsに移動しました。この場合

+25

nooooooo!本当に?どうして? – juliomalegria

+25

@ julio.alegria:[Guidoは嫌いだから](http://www.artima.com/weblogs/viewpost.jsp?thread=98196)。 –

+2

@ IgnacioVazquez-Abramsで参照されている記事は、大文字小文字がより読みやすい方法で書かれる方法について、本当に良い点を示しています。私にとっては、 'sum(list_of_dictsのitemに 'item' 'key' ')を書くことです。 – connorbode

1

私は次のように同等であると信じている:

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

これの唯一の問題は、それが大きな数字を作成するということですが、多分それは繰り返さ剰余演算よりも良いですか?

+0

これは確かにかなり効率的です... – naught101

+0

nep = 10000の場合、20以上の要素で... – naught101

70

あなたは削減を使用する前に、

from functools import reduce 

を追加することができます。

+0

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

1

それとも、6つのライブラリ

from six.moves import reduce 
関連する問題