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?

Sergey
la source
3
@JBernardo, quel est le bon outil?
Sergey

Réponses:

292

Il a été déplacé vers functools.

Ignacio Vazquez-Abrams
la source
49
@ julio.alegria: Parce que Guido le déteste .
Ignacio Vazquez-Abrams
6
L'article référencé dans @ IgnacioVazquez-Abrams fait de très bons points sur la façon dont la plupart des cas peuvent être écrits de manière plus lisible. Pour moi, c'est en écrivant sum(item['key'] for item in list_of_dicts).
connorbode
Cela devrait être dans la langue de base
ctpenrose
206

Vous pouvez ajouter

from functools import reduce

avant d'utiliser la réduction.

3 tous les jours
la source
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
Azd325
la source
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?

David M
la source
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
1

vous devez installer et importer réduire à partir du functoolspackage python

Jesvin Vijesh S
la source