Restituzione del prodotto di una lista

| |

C'è un modo più conciso, efficiente o semplicemente pitone per fare quanto segue?

def product(lst): p = 1 for i in lst: p *= i return p 

EDIT:

In realtà trovo che questo sia leggermente più veloce dell'utilizzo di operator.mul:

dall'operatore import mul # da functools import reduce # python3 compatibilità def with_lambda(lst): reduce(lambda x, y: x * y, lst) def without_lambda(lst): reduce(mul, lst) def forloop(lst): r = 1 for x in lst: r *= x return r import timeit a = range(50) b = range(1,50)#no zero t = timeit.Timer("with_lambda(a)", "from __main__ import with_lambda,a") print("con lambda:", t.timeit()) t = timeit.Timer("senza_lambda(a)", "da __main__ importa senza_lambda,a") print("senza lambda:" , t.timeit()) t = timeit.Timer("forloop(a)", "from __main__ import forloop,a") print("for loop:", t.timeit()) t = timeit.Timer("with_lambda(b)&quo t;, "da __main__ import with_lambda,b") print("con lambda (no 0):", t.timeit()) t = timeit.Timer("senza_lambda(b)", " from __main__ import without_lambda,b") print("senza lambda (no 0):", t.timeit()) t = timeit.Timer("forloop(b)", "from __main__ import forloop, b") print("for loop (no 0):", t.timeit()) 

mi dà

("with lambda :", 17.755449056625366) ("senza lambda:", 8.2084708213806152) ("for loop:", 7.4836349487304688) ("con lambda (n. 0):", 22.570688009262085) ("senza lambda (n. 0):", 12.47222 "for loop (no 0):", 11.04065990447998)