如何定义引用范围中先前值的函数?

时间:2019-01-13 15:35:08

标签: python python-3.x range

因此,我试图定义一个数学上看起来像这样的函数:M_n = M_n-1(1 + g)-其中n和n-1是下标,而g是常数。

我要在1到100的范围内执行此操作。我已经具有n = 1的值。到目前为止,我拥有的代码如下:

for num in range(1,100):
    if num <= 1:
        print(M_n)    # since I already have an M_n for n=1

因此,从n = 2开始,如何确保M_n引用其先前的值并对它进行以下操作:M_n-1(1 + g)?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

M_(n-1)只是最新的计算,是在循环的上一次迭代中产生的。将其存储在变量中,并在下一次迭代中再次引用它。

如果不需要中间的M_n值,只需保留一个更新的结果:

m = 1  # M_0, so the starting value for the sequence
for n in range(1, 100):
    # update M_n for the current iteration
    m *= 1 + g

或者您可以追加到列表(此时,前一个值始终是列表中的最后一个值):

m = [1]  # list with M_0, so the starting value for the sequence
for n in range(1, 100):
    # add M_n for the current iteration
    m.append(m[-1] * (1 + g))

或使用itertools.accumulate()累积所有值:

from itertools import accumulate, chain

calc_mn = lambda prev, n: prev * (1 + g)
# calculate starting from [1] for M_0
m = accumulate(chain([1], range(1, 100)), calc_mn)

在后一种情况下,m是一个迭代器,在您进行迭代时会产生结果。