簡體   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