NameError: il nome 'ridurre' non è definito in Python


187

Sto usando Python 3.2. Ho provato questo:

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

E ottenuto il seguente errore:

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

Ho provato a stampare reducesulla console interattiva - ho ricevuto questo errore:

NameError: name 'reduce' is not defined


È reducedavvero rimosso in Python 3.2? In tal caso, qual è l'alternativa?


3
@JBernardo, qual è lo strumento giusto?
Sergey,

Risposte:



195

Puoi aggiungere

from functools import reduce

prima di usare la riduzione.


3
L'utente precedente ha già risposto alla domanda e la risposta è la stessa della sua risposta
Kathiravan Natarajan,

8

O se usi le sei librerie

from six.moves import reduce

3

In questo caso, credo che quanto segue sia equivalente:

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

L'unico problema è che crea grandi numeri, ma forse è meglio delle ripetute operazioni del modulo?


Le ripetute operazioni del modulo sono utili quando aiuta a mantenere piccoli i numeri. Sommare i numeri non creerà grandi numeri a meno che non si sommino MOLTI numeri, quindi in questo caso non sarebbe d'aiuto. Soprattutto perché non farlo consente l'uso della funzione di somma integrata, che verrà eseguita molto più velocemente dell'applicazione ripetuta di una funzione definita dall'utente
HackerBoss
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.