Necesito escribir una función que tome una lista de números y los multiplique . Ejemplo:
[1,2,3,4,5,6]
me dará 1*2*3*4*5*6
. Realmente podría usar tu ayuda.
python
list
multiplication
usuario1897814
fuente
fuente
lambda
tomé un promedio de .02s / 1000 repeticiones, mientras queoperator.mul
tomé un promedio de .009s / 1000 repeticiones, haciendooperator.mul
un orden de magnitud más rápido.operator.mul
va directamente a Cmath.prod([1,2,3,4,5,6])
. (requiere importación, por supuesto)Puedes usar:
Ver
reduce
yoperator.mul
documentaciones para una explicación.Necesitas la
import functools
línea en Python 3+.fuente
reduce()
función se ha eliminado del espacio de nombres global y se ha colocado en elfunctools
módulo. Entonces, en python3 necesitas decirfrom functools import reduce
.lambda x,y: x*y
también funciona en lugar deoperator.mul
Usaría el
numpy.prod
para realizar la tarea. Vea abajo.fuente
result = np.prod(mylist)
numpy.int32
como el anterior 2) Para listas pequeñas esto será significativamente más lento, ya que NumPy necesita asignar una matriz (relevante si se repite con frecuencia)np.prod(np.array(range(1,21)))
reduce
.Si desea evitar importar algo y evitar áreas más complejas de Python, puede usar un bucle for simple
fuente
Comenzando
Python 3.8
,.prod
se ha incluido una función almath
módulo en la biblioteca estándar:El método devuelve el producto de un
start
valor (predeterminado: 1) multiplicado por un iterable de números:Si el iterable está vacío, esto producirá
1
(o elstart
valor, si se proporciona).fuente
Aquí hay algunas mediciones de rendimiento de mi máquina. Relevante en caso de que esto se realice para entradas pequeñas en un ciclo de larga duración:
Resultados:
Puede ver que Numpy es bastante más lento en entradas más pequeñas, ya que asigna una matriz antes de que se realice la multiplicación. Además, ten cuidado con el desbordamiento en Numpy.
fuente
multiply_functools
y estoymultiply_numpy
abrumado por tener que buscar elnp
,functools
y losoperator
globales, seguido de búsquedas de atributos. ¿Te importaría cambiarte a locales?_reduce=functools.reduce,
_mul = operator.mul` en la firma de la función y luegoreturn _reduce(_mul, iterable)
en el cuerpo, etc.np.prod()
opción comienza se vuelve más rápida con 100 elementos o más.Personalmente, me gusta esto para una función que multiplica todos los elementos de una lista genérica:
Es compacto, usa cosas simples (una variable y un bucle for), y me parece intuitivo (parece que pensaría en el problema, solo toma uno, multiplícalo, luego multiplícalo por el siguiente, ¡y así sucesivamente! )
fuente
for i in n:
entoncestotal *= i
? ¿No sería mucho más sencillo?La forma simple es:
fuente
np.prod(your_Array)
Numpy
tiene laprod()
función que devuelve el producto de una lista, o en este caso, ya que es numpy, es el producto de una matriz sobre un eje dado:... o simplemente puedes importar
numpy.prod()
:fuente
Encontré esta pregunta hoy, pero me di cuenta de que no tiene el caso donde hay
None
en la lista. Entonces, la solución completa sería:En el caso de la adición, tenemos:
fuente
fuente
*
, de modo que eval reconocerá esto como multiplicativo. Me pregunto cómo es el rendimiento de esto, especialmente en comparación con otras solucionesMe gustaría esto de la siguiente manera:
fuente
Este es mi código:
resultado: ('1 * 1 * 2 * 3 * 4', 24)
fuente
¿Qué tal el uso de la recursividad?
fuente
Mi solución:
fuente
'' 'el único método simple para comprender el uso lógico del bucle' ''
Vuelta = [2,5,7,7,9] x = 1 para i en Vuelta: x = i * x print (x)
fuente
Es muy sencillo no importar nada. Este es mi codigo. Esto definirá una función que multiplica todos los elementos de una lista y devuelve su producto.
fuente