[英]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.