有没有更简洁,有效或简单的pythonic方法来执行以下操作?def product(list): p = 1 for i in list: p *= i return p编辑:我实际上发现这比使用operator.mul快一点:from operator import mul# from functools import reduce # python3 compatibilitydef with_lambda(list): reduce(lambda x, y: x * y, list)def without_lambda(list): reduce(mul, list)def forloop(list): r = 1 for x in list: r *= x return rimport timeita = range(50)b = range(1,50)#no zerot = timeit.Timer("with_lambda(a)", "from __main__ import with_lambda,a")print("with lambda:", t.timeit())t = timeit.Timer("without_lambda(a)", "from __main__ import without_lambda,a")print("without lambda:", t.timeit())t = timeit.Timer("forloop(a)", "from __main__ import forloop,a")print("for loop:", t.timeit())t = timeit.Timer("with_lambda(b)", "from __main__ import with_lambda,b")print("with lambda (no 0):", t.timeit())t = timeit.Timer("without_lambda(b)", "from __main__ import without_lambda,b")print("without lambda (no 0):", t.timeit())t = timeit.Timer("forloop(b)", "from __main__ import forloop,b")print("for loop (no 0):", t.timeit())给我('with lambda:', 17.755449056625366)('without lambda:', 8.2084708213806152)('for loop:', 7.4836349487304688)('with lambda (no 0):', 22.570688009262085)('without lambda (no 0):', 12.472226858139038)('for loop (no 0):', 11.04065990447998)
添加回答
举报
0/150
提交
取消