从数组 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]
