返回清单的产品

有没有更简洁,有效或简单的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 compatibility


def 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 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("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)


慕田峪7331174
浏览 351回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python