Skip to main content
 首页 » 编程设计

python之使用 reduce 来缩短 for 循环

2025年05月04日12TianFang

从数组 Ns 中,我想导出一个数组 multipliers,如下所示:

Ns = [3, 3, 6, 3] 
 
multipliers = [0]*len(Ns) 
multipliers[0] = 1 
for n in range(1,len(Ns)): 
    multipliers[n] = multipliers[n-1] * Ns[n-1] 

生成的数组 multipliers 是 [1, 3, 9, 54]。我的直觉是应该可以使用 reduce 或其他内置函数使这段代码更简洁,但我还不知道如何做。有什么想法吗?

请您参考如下方法:

你可以使用 itertools.accumulate使用自定义累积函数(仅限 Python 3,如果你想使用 Python 2,你可以安装 fn.py 库(或类似库)或使用文档中提供的实现向后移植函数):

In [10]: from itertools import accumulate 
 
In [11]: import operator 
 
In [12]: list(accumulate([3, 3, 6, 3], func=operator.mul)) 
Out[12]: [3, 9, 54, 162] 

然后只需修复第一个和最后一个元素:

In [13]: l = list(accumulate([3, 3, 6, 3], func=operator.mul)) 
 
In [14]: [1] + l[:-1] 
Out[14]: [1, 3, 9, 54]