multiply - ¿Cómo puedo multiplicar todos los artículos en una lista junto con Python?
multiply two lists python (14)
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.
¿Qué hay de usar recursión?
def multiply(lst):
if len(lst) > 1:
return multiply(lst[:-1])* lst[-1]
else:
return lst[0]
Aquí hay algunas medidas de rendimiento de mi máquina. Relevante en caso de que esto se realice para entradas pequeñas en un bucle de larga duración:
def multiply_numpy(iterable):
return np.prod(np.array(iterable))
def multiply_functools(iterable):
return functools.reduce(operator.mul, iterable)
def multiply_manual(iterable):
prod = 1
for x in iterable:
prod *= x
return prod
sizesToTest = [5, 10, 100, 1000, 10000, 100000]
for size in sizesToTest:
data = [1] * size
timerNumpy = timeit.Timer(lambda: multiply_numpy(data))
timerFunctools = timeit.Timer(lambda: multiply_functools(data))
timerManual = timeit.Timer(lambda: multiply_manual(data))
repeats = int(5e6 / size)
resultNumpy = timerNumpy.timeit(repeats)
resultFunctools = timerFunctools.timeit(repeats)
resultManual = timerManual.timeit(repeats)
Resultados:
Input size: 5 Repeats: 1000000 Numpy: 4.670, Functools: 0.586, Manual: 0.459
Input size: 10 Repeats: 500000 Numpy: 2.443, Functools: 0.401, Manual: 0.321
Input size: 100 Repeats: 50000 Numpy: 0.505, Functools: 0.220, Manual: 0.197
Input size: 1000 Repeats: 5000 Numpy: 0.303, Functools: 0.207, Manual: 0.185
Input size: 10000 Repeats: 500 Numpy: 0.265, Functools: 0.194, Manual: 0.187
Input size: 100000 Repeats: 50 Numpy: 0.266, Functools: 0.198, Manual: 0.185
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.
Encontré esta pregunta hoy, pero noté que no tiene el caso donde hay None
en la lista. Entonces, la solución completa sería:
from functools import reduce
a = [None, 1, 2, 3, None, 4]
print(reduce(lambda x, y: (x if x else 1) * (y if y else 1), a))
En el caso de la suma, tenemos:
print(reduce(lambda x, y: (x if x else 0) + (y if y else 0), a))
La manera simple es:
import numpy as np
np.exp(np.log(your_array).sum())
Me gustaría esto de la siguiente manera:
def product_list(p):
total =1 #critical step works for all list
for i in p:
total=total*i # this will ensure that each elements are multiplied by itself
return total
print product_list([2,3,4,2]) #should print 48
Personalmente me gusta esto para una función que multiplica todos los elementos de una lista genérica:
def multiply(n):
total = 1
for i in range(0, len(n)):
total *= n[i]
print total
Es compacto, usa cosas simples (una variable y un ciclo for), y se siente intuitivo para mí (parece que yo pensaría en el problema, simplemente tome uno, multiplíquelo, luego multiplique por el siguiente, y así sucesivamente! )
Puedes usar:
import operator
import functools
functools.reduce(operator.mul, [1,2,3,4,5,6], 1)
Consulte los documentos de reduce
y operator.mul
para obtener una explicación.
Necesitas la línea de import functools
en Python 3+.
Python 3: use functools.reduce
:
>>> from functools import reduce
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
720
Python 2: use reduce
:
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
720
Si quiere evitar importar algo y evitar áreas más complejas de Python, puede usar un bucle simple para
product = 1 # Don''t use 0 here, otherwise, you''ll get zero
# because anything times zero will be zero.
list = [1, 2, 3]
for x in list:
product *= x
numpy.prod
para realizar la tarea. Vea abajo.
import numpy as np
mylist = [1, 2, 3, 4, 5, 6]
result = np.prod(np.array(mylist))
Mi solución para multiplicar elementos en una tupla o lista
a = 140,10
val = 1
for i in a:
val *= i
print(val)
[SALIDA] :
1400
def multiply(numbers):
total = numbers[0]
for num in numbers:
total *= num
return total
nums = str(tuple([1,2,3]))
mul_nums = nums.replace('','',''*'')
print(eval(mul_nums))
var=1
def productlist(number):
global var
var*=number
list(map(productlist,[1,2,4]))
print(var)
Puedes hacer esto con un mapa