gpt4 book ai didi

python - 返回列表的产品

转载 作者:IT老高 更新时间:2023-10-28 12:28:56 29 4
gpt4 key购买 nike

是否有更简洁、高效或简单的 Python 方式来执行以下操作?

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

编辑:

我实际上发现这比使用 operator.mul 快一点:

from operator import mul
# from functools import reduce # python3 compatibility

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

最佳答案

不使用 lambda:

from operator import mul
# from functools import reduce # python3 compatibility
reduce(mul, list, 1)

它更好更快。使用 python 2.7.5

from operator import mul
import numpy as np
import numexpr as ne
# from functools import reduce # python3 compatibility

a = range(1, 101)
%timeit reduce(lambda x, y: x * y, a) # (1)
%timeit reduce(mul, a) # (2)
%timeit np.prod(a) # (3)
%timeit ne.evaluate("prod(a)") # (4)

在以下配置中:

a = range(1, 101)  # A
a = np.array(a) # B
a = np.arange(1, 1e4, dtype=int) #C
a = np.arange(1, 1e5, dtype=float) #D

python 2.7.5 的结果

       |     1     |     2     |     3     |     4     |-------+-----------+-----------+-----------+-----------+ A       20.8 µs     13.3 µs     22.6 µs     39.6 µs      B        106 µs     95.3 µs     5.92 µs     26.1 µs C       4.34 ms     3.51 ms     16.7 µs     38.9 µs D       46.6 ms     38.5 ms      180 µs      216 µs

结果:np.prod是最快的,如果你使用np.array作为数据结构(小数组18x,大数组250x)

使用 python 3.3.2:

       |     1     |     2     |     3     |     4     |-------+-----------+-----------+-----------+-----------+ A       23.6 µs     12.3 µs     68.6 µs     84.9 µs      B        133 µs      107 µs     7.42 µs     27.5 µs C       4.79 ms     3.74 ms     18.6 µs     40.9 µs D       48.4 ms     36.8 ms      187 µs      214 µs

python 3 慢吗?

关于python - 返回列表的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2104782/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com