J'ai parcouru un tutoriel et un livre, mais je ne trouve aucune mention d'une fonction de produit intégrée, c'est-à-dire du même type que sum (), mais je n'ai rien trouvé de tel que prod()
.
Est-ce le seul moyen de trouver le produit d'éléments dans une liste en important l'opérateur mul()
?
Oui c'est vrai. Guido a rejeté l'idée pour une fonction intégrée prod () car il pensait que c'était rarement nécessaire.
Dans Python 3.8, prod () a été ajouté au module mathématique:
>>> from math import prod
>>> prod(range(1, 11))
3628800
Comme vous l'avez suggéré, il n'est pas difficile de créer votre propre en utilisant réduire () et operator.mul () :
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
Dans Python 3, la fonction ) () a été déplacée vers le module functools , vous devez donc ajouter:
from functools import reduce
En remarque, le principal cas d'utilisation motivant de prod () consiste à calculer des factoriels. Nous avons déjà un support pour cela dans le module mathématique :
>>> import math
>>> math.factorial(10)
3628800
Si vos données sont constituées de flottants, vous pouvez calculer un produit en utilisant sum () 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
Il n’ya pas de product
dans Python, mais vous pouvez le définir comme
def product(iterable):
return reduce(operator.mul, iterable, 1)
Ou, si vous avez NumPy, utilisez numpy.product
.
Puisque la fonction reduction () a été déplacée vers le module functools
python 3. , 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é reduce()
parce qu'ils pensent que for
serait plus lisible), faites-le avec une boucle:
product = 1
for x in iterable:
product *= x
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 sympas pour les listes!