[英]Rounding values in list when using itertools.accumulate function
[英]itertools accumulate to build a recursive list
我想以这样的方式从种子构建列表: seed, seed*weight - seed*weight**2
等,其中前一个数字是下一个的种子。
因此, seed
为.5
且weight
为3
我们将得到
.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.