itertools累积以构建递归列表

时间:2017-07-26 17:23:07

标签: python python-3.x itertools accumulate

我想以这种方式从种子构建一个列表: seed, seed*weight - seed*weight**2,依此类推,前一个号码是下一个号码的种子。

因此seed的{​​{1}}和.5的{​​{1}}我们会得到

weight依此类推

这是我认为可行的:

3

输入列表是否会创建.5, -4, 24.0列表的问题,而不是使用我想要的数字向前填充列表?

1 个答案:

答案 0 :(得分:1)

您的accumulate来电并未使用您已声明的weight变量。相反,它使用inputs中的第一个值作为第一个seed(这是预期的),并将所有其他值作为权重(不是预期的)。

您可以使用其他inputs列表:

inputs = [seed] + [weight]*10
results = list(accumulate(inputs, relationships))

但我不确定accumulate是否是解决此问题的最佳方法。我认为以另一种方式解决问题更为自然,例如使用无限生成器函数:

def gen(seed, weight):
    while True:
        seed = seed * weight - seed * weight**2
        yield seed

由于该系列是一个简单的几何级数(每一步乘以weight - weight**2),您还可以编写一个函数来计算闭合形式的每个值:

def calc(seed, weight, n):
    factor = weight - weight**2
    return seed * factor**(n+1)