¿Hay un product() incorporado en Python? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
He estado mirando un tutorial y un libro, pero no puedo encontrar ninguna mención de una función de producto incorporada, es decir, del mismo tipo que sum (), pero no pude encontrar nada como prod()
.
Es la única manera que podría encuentra el producto de los artículos en una lista importando el operador mul()
?
4 answers
Pronunciamiento
Sí, así es. Guido rechazó la idea de una función prod() incorporada porque pensó que rara vez era necesaria.
Alternativa con reduce ()
Como usted sugirió, no es difícil hacer su propio uso reducir() y operadora.mul():
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
En Python 3, el reducir() la función se movió al módulo functools , por lo que necesitaría añadir:
from functools import reduce
Caso específico: Factoriales
Como nota al margen, el principal caso de uso motivador para prod() es calcular factoriales. Ya tenemos soporte para eso en el módulo math :
>>> import math
>>> math.factorial(10)
3628800
Alternativa con logaritmos
Si sus datos consisten en flotadores, puede calcular un producto usando sum () con exponentes y logaritmos:
>>> 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 17:27:31
No hay product
en Python, pero puedes definirlo como
def product(iterable):
return reduce(operator.mul, iterable, 1)
O, si tiene NumPy, use numpy.product
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-30 22:26:26
Dado que la función reduce() ha sido eliminada en python 3.0, debes tomar un enfoque diferente.
Puedes usar functools.reduce()
para hacer que el cambio no ocurra:
product = functools.reduce(operator.mul, iterable, 1)
O, si quieres seguir el espíritu del equipo python (que eliminó reduce()
porque piensan que for
sería más legible), hazlo con un bucle:
product = 1
for x in iterable:
product *= x
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-05 21:03:36
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 tiene muchas funciones muy interesantes para las listas!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-30 22:27:17