我有一个很长的名单(大号码)的列表,让我们说,例如:Python3如何创建部分产品
a=[4,6,7,2,8,2]
我需要得到这个输出:
b=[4,24,168,336,2688,5376]
其中每个b[i]=a[0]*a[1]...*a[i]
我想用这种方式递归地做到这一点:
b=[4] + [ a[i-1]*a[i] for i in range(1,6)]
但(错误的)结果是:[4, 24, 42, 14, 16, 16]
我不想计算的所有产品每一次,我需要一个有效的方式(如果可能),因为列表很长
目前这个工作对我来说:
b=[0]*6
b[0]=4
for i in range(1,6): b[i]=a[i]*b[i-1]
但它的速度太慢。有任何想法吗?是否有可能避免“for”或以其他方式加速?
感谢您的回答。好的复杂性,但是python实现呢?有更好的方法(地图或其他东西)可以加速计算吗? – arulbero
@arulbero不,这可能是你能得到的最快速度。 Python中的地图最适合内置插件,因为它们部分以C语言和其他低级语言实现。如果你真的想**最好的**性能,你可以用Cython(Python和C的混合)编写这个循环,但这会过度 - 这个算法足够好了 – Leva7
@arulbero但检查编辑,实际上一种获得一点收益的方式 – Leva7