how - ¿Hay un producto incorporado() en Python?
python itertools product (4)
Declaración
Si, eso es correcto Guido rechazó la idea de una función prod () incorporada porque pensó que rara vez se necesitaba.
Alternativa con reducir ()
Como sugirió, no es difícil crear su propio uso de reduce() y operator.mul() :
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
En Python 3, la función reduce() se movió al módulo functools , por lo que necesitaría agregar:
from functools import reduce
Caso específico: Factoriales
Como nota al margen, el caso de uso de motivación principal para prod () es calcular factoriales. Ya tenemos soporte para eso en el módulo de matemáticas :
>>> import math
>>> math.factorial(10)
3628800
Alternativa con logaritmos
Si sus datos consisten en flotantes, 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
Esta pregunta ya tiene una respuesta aquí:
He estado buscando en un tutorial y un libro, pero no puedo encontrar ninguna mención de una función incorporada del producto, es decir, del mismo tipo que sum (), pero no pude encontrar nada como prod()
.
¿Es la única forma en que puedo encontrar el producto de los artículos en una lista importando el operador mul()
?
Como la función reduce () ha sido eliminada en python 3.0 , debe adoptar un enfoque diferente.
Puede usar functools.reduce()
para hacer que el cambio se deshaga:
product = functools.reduce(operator.mul, iterable, 1)
O bien, si desea seguir el espíritu del equipo python (que eliminó reduce()
porque creen que sería más legible), hágalo con un bucle:
product = 1
for x in iterable:
product *= x
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
.
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 realmente geniales para las listas.