Quelle est la fonction comme sum (), mais pour la multiplication? produit()?
Python sum()
fonction renvoie la somme des nombres dans un objet iterable.
sum([3,4,5]) == 3 + 4 + 5 == 12
Je suis à la recherche de la fonction qui retourne le produit à la place.
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
J'en suis sûr, une telle fonction existe, mais je ne le trouve pas.
Vous devez vous connecter pour publier un commentaire.
En fait, Guido a rejeté l'idée: http://bugs.python.org/issue1093
Mais, comme indiqué dans la question, vous pouvez en faire un assez facilement:
reduce
?functools.reduce
au lieu dereduce
.product()
dans la bibliothèque standard, le nombre de vues sur cette question pourrait faire l'affaire.import operator; print(reduce(operator.mul,filter(None, [1,2,3,None])))
?6
au lieu de0
Mise à jour:
En Python 3.8, la prod fonction a été ajoutée à la mathématiques module. Voir: les mathématiques.prod().
Âgées info: Python 3.7 et avant
La fonction vous êtes à la recherche pour serait appelé prod() ou produit() mais Python ne dispose pas de cette fonction. Donc, vous devez écrire votre propre (ce qui est facile).
Prononcé sur la prod()
Oui, c'est vrai. Guido rejeté l'idée pour un haut-prod (), car il pensait que c'était rarement nécessaire.
Alternative à réduire()
Comme vous l'avez suggéré, il n'est pas difficile de faire votre propre en utilisant réduire() et l'opérateur.mul():
En Python 3, le réduire() fonction a été déplacée à la functools module, de sorte que vous devez ajouter:
Cas particulier: les Factorielles
Comme une note côté, le principal cas d'utilisation de motivation pour prod() est de calculer les factorielles. Nous avons déjà le soutien de la module math:
Alternative avec des logarithmes
Si vos données se compose de flotte, vous pouvez calculer un produit en utilisant somme() avec les exposants et les logarithmes:
Notez que l'utilisation de log() exige que toutes les entrées sont positifs.
Il n'y a pas un construit dans, mais il est simple de rouler vos propres, comme l'a démontré ici:
Voir les réponses à cette question:
Qui module Python est adapté pour la manipulation de données dans une liste?
functools.reduce
au lieu dereduce
.prod = functools.partial(functools.reduce, operator.mul)
Il y a un
prod()
dans numpy qui fait ce que vous demandez.np.prod(range(1,13))
donne la bonne réponse égale à 12! maisnp.prod(range(1,14))
ne le fait pas.math.prod()
fonction de cette réponse obsolètes.( ou
)
Numeric
?Utiliser cette
Puisqu'il n'est pas intégré dans le
prod
fonction.lambda a,b: a*b
, il n'est pas un problème. Mais réduire de ne pas généraliser bien, et devient abusé. Je préfère les débutants de ne pas l'apprendre.Je préfère les réponses un et b ci-dessus en utilisant functools.réduire() et la réponse à l'aide de numpy.prod(), mais voici encore une autre solution à l'aide de itertools.accumulate():
Peut-être pas un "builtin", mais je considère qu'il est intégré. de toute façon il suffit d'utiliser numpy