2017-07-26 9 views
0

シードからリストを構築する場合は、 seed, seed*weight - seed*weight**2などとなります。前の数字は次のシードのシードです。itertoolsが累積して再帰的リストを構築する

ので.5seed3weightで、我々は

.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のリストを作成しますか?

+1

だから、毎回その値に-6(または一般的には体重 - 重さ** 2)を乗算しているだけですか? – user2357112

答えて

1

accumulate呼び出しでは、あなたが宣言したweight変数はまったく使用されません。むしろ最初のseed(最初の値はinputs)の最初の値とそれ以外のすべての値を重み(意図していない値)として使用します。

あなたはそれが異なる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) 
+0

ありがとうございました、利回りは、私が使用方法を理解しようとしていたものの、そのジャンプをかなりできないものでした。 – Dennis

関連する問題