91 votes

Existe-t-il un produit() intégré en Python ?

J'ai cherché dans un tutoriel et un livre mais je n'ai trouvé aucune mention d'une fonction produit intégrée, c'est-à-dire du même type que sum(), mais je n'ai rien trouvé du genre prod() .

Est-ce que la seule façon de trouver le produit des éléments d'une liste est d'importer le fichier mul() opérateur ?

118voto

Raymond Hettinger Points 50330

Prononciation

Oui, c'est ça. Guido a rejeté l'idée pour une fonction intégrée prod() parce qu'il pensait qu'elle était rarement nécessaire.

Mise à jour de Python 3.8

Dans Python 3.8, prod() a été ajouté au module mathématique :

>>> from math import prod
>>> prod(range(1, 11))
3628800

Alternative avec reduce()

Comme vous l'avez suggéré, il n'est pas difficile de faire le vôtre en utilisant réduire() y opérateur.mul() :

def prod(iterable):
    return reduce(operator.mul, iterable, 1)

>>> prod(range(1, 5))
24

Dans Python 3, la fonction réduire() a été déplacée vers la fonction module functools il faut donc ajouter :

from functools import reduce

Cas spécifique : Factoriels

À titre d'information, le principal cas d'utilisation motivant la mise en œuvre de l'initiative prod() est de calculer des factorielles. Nous avons déjà un support pour cela dans le module de mathématiques :

>>> import math

>>> math.factorial(10)
3628800

Alternative avec les logarithmes

Si vos données consistent en des flottants, vous pouvez calculer un produit en utilisant somme() avec des exposants et des logarithmes :

>>> from math import log, exp

>>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8]
>>> exp(sum(map(log, data)))
218.53799999999993

>>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8
218.53799999999998

19voto

larsmans Points 167484

Il n'y a pas product en Python, mais vous pouvez le définir comme suit

def product(iterable):
    return reduce(operator.mul, iterable, 1)

Ou, si vous avez NumPy, utilisez numpy.product .

14voto

Paul Paulsen Points 113

Depuis le La fonction reduce() a été déplacée vers le module functools python 3.0 vous devez adopter une approche différente.

Vous pouvez utiliser functools.reduce() pour accéder à la fonction :

product = functools.reduce(operator.mul, iterable, 1)

Ou, si vous voulez suivre l'esprit de l'équipe python (qui a supprimé les reduce() parce qu'ils pensent for serait plus lisible), faites-le avec une boucle :

product = 1
for x in iterable:
    product *= x

9voto

HuntR2 Points 54
from numpy import multiply, product
list1 = [2,2,2]
list2 = [2,2,2]
mult = 3
prod_of_lists = multiply(list1,list2)
>>>[4,4,4]
prod_of_list_by_mult = multiply(list1,mult)
>>>[6,6,6]
prod_of_single_array = product(list1)
>>>8

numpy a beaucoup de fonctions vraiment cool pour les listes !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X