NameError: nazwa „zmniejsz” nie jest zdefiniowana w Pythonie


187

Używam Python 3.2. Próbowałem tego:

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

I wystąpił następujący błąd:

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

Próbowałem wydrukować reducena interaktywnej konsoli - otrzymałem ten błąd:

NameError: name 'reduce' is not defined


Czy reducenaprawdę jest usunięty w Pythonie 3.2? Jeśli tak jest, jaka jest alternatywa?


3
@JBernardo, jakie jest właściwe narzędzie?
Siergiej

Odpowiedzi:



195

Możesz dodać

from functools import reduce

przed użyciem zmniejsz.


3
Poprzedni użytkownik już odpowiedział na pytanie, a odpowiedź jest taka sama jak jego odpowiedź
Kathiravan Natarajan

8

Lub jeśli korzystasz z biblioteki sześciu

from six.moves import reduce

3

W tym przypadku uważam, że następujące jest równoważne:

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

Jedynym problemem jest to, że tworzy duże liczby, ale może to jest lepsze niż powtarzane operacje modulo?


Powtarzane operacje modulo są przydatne, gdy pomagają utrzymać liczby małe. Sumowanie liczb nie utworzy dużych liczb, chyba że sumujesz DUŻO liczb, więc w tym przypadku nie pomogłoby. Zwłaszcza, że ​​nie zrobienie tego pozwala na użycie wbudowanej funkcji sumowania, która będzie działać znacznie szybciej niż wielokrotne stosowanie funkcji zdefiniowanej przez użytkownika
HackerBoss
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.