NameError: le nom 'réduire' n'est pas défini en Python


192

J'utilise Python 3.2. J'ai essayé ceci:

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

Et j'ai l'erreur suivante:

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

J'ai essayé l'impression reducedans la console interactive - j'ai obtenu cette erreur:

NameError: name 'reduce' is not defined


Est-ce reducevraiment supprimé dans Python 3.2? Si tel est le cas, quelle est l'alternative?


3
@JBernardo, quel est le bon outil?
Sergey

Réponses:



206

Vous pouvez ajouter

from functools import reduce

avant d'utiliser la réduction.


3
L'utilisateur précédent a déjà répondu à la question et la réponse est la même que celle de sa réponse
Kathiravan Natarajan

8

Ou si vous utilisez la bibliothèque six

from six.moves import reduce

4

Dans ce cas, je pense que ce qui suit est équivalent:

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

Le seul problème avec cela est que cela crée de grands nombres, mais peut-être que c'est mieux que des opérations modulo répétées?


Les opérations modulo répétées sont utiles lorsqu'elles aident à garder des nombres petits. La somme des nombres ne créera pas de grands nombres à moins que vous n'additionniez BEAUCOUP de nombres, donc dans ce cas cela n'aiderait pas. Surtout que ne pas le faire permet d'utiliser la fonction de somme intégrée, qui fonctionnera beaucoup plus rapidement que l'application répétée d'une fonction définie par l'utilisateur
HackerBoss

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.