NameError: Der Name 'reduzieren' ist in Python nicht definiert


187

Ich benutze Python 3.2. Versuchte dies:

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

Und bekam folgenden Fehler:

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

Versucht, reducein eine interaktive Konsole zu drucken - habe diesen Fehler erhalten:

NameError: name 'reduce' is not defined


Wird reducein Python 3.2 wirklich entfernt? Wenn dies der Fall ist, welche Alternative gibt es dann?


3
@JBernardo, was ist das richtige Werkzeug?
Sergey

Antworten:



194

Du kannst hinzufügen

from functools import reduce

bevor Sie die Reduktion verwenden.


3
Der vorherige Benutzer hat die Frage bereits beantwortet und die Antwort ist die gleiche wie die seiner Antwort
Kathiravan Natarajan

8

Oder wenn Sie die sechs Bibliotheken verwenden

from six.moves import reduce

3

In diesem Fall glaube ich, dass Folgendes gleichwertig ist:

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

Das einzige Problem dabei ist, dass es große Zahlen erzeugt, aber vielleicht ist das besser als wiederholte Modulo-Operationen?


Wiederholte Modulo-Operationen sind nützlich, wenn es hilft, Zahlen klein zu halten. Das Summieren von Zahlen erzeugt keine großen Zahlen, es sei denn, Sie summieren VIELE Zahlen. In diesem Fall würde dies also nicht helfen. Zumal dies nicht die Verwendung der eingebauten Summenfunktion ermöglicht, die viel schneller ausgeführt wird als die wiederholte Anwendung einer benutzerdefinierten Funktion
HackerBoss
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.