繁体   English   中英

itertools累积构建递归列表

[英]itertools accumulate to build a recursive list

我想以这样的方式从种子构建列表: seed, seed*weight - seed*weight**2等,其中前一个数字是下一个的种子。

因此, seed.5weight3我们将得到

.5, -4, 24.0

我认为这是可行的:

from itertools import accumulate, repeat 

relationship = lambda seed, weight: seed*weight - seed*weight**2
seed = .5 
weight = 3
inputs = list(repeat(seed,10))
first = [x for x in accumulate(inputs, relationship)]

输入列表会创建一个.5 s的列表,而不是用我想要的数字向前填充列表的问题吗?

您的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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM