Ich denke, die itertools.accumulate
Ihre Bedürfnisse erfüllen können, aber es ist Rückgabewert kann unterschiedlich sein zum Beispiel
def generateSequence(seed, f, n):
sequence = list(seed)
for i in range(n):
sequence.append(f(sequence, i))
return sequence
, die wie so verwendet werden können von dem, was du erwartest.
Zum Beispiel:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from itertools import accumulate
def callback(seq, i):
"""
seq: the sequence you will modified
i: the number of times this function is called
"""
seq.append(seq[-1] + seq[-2])
return seq
res = accumulate([[0, 1]] + list(range(1, 8 + 1)), callback)
for item in res:
print(item)
Die [0, 1]
ist die init-Sequenz und die 8
ist die Anzahl, wie oft Sie die callback
Funktion aufrufen möchten.
Und das Ergebnis der obigen Code ist dies:
In [48]: run test.py
[0, 1]
[0, 1, 1]
[0, 1, 1, 2]
[0, 1, 1, 2, 3]
[0, 1, 1, 2, 3, 5]
[0, 1, 1, 2, 3, 5, 8]
[0, 1, 1, 2, 3, 5, 8, 13]
[0, 1, 1, 2, 3, 5, 8, 13, 21]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Der letzte ist man wollte.
'für i in Bereich (n): Ausbeute f (Sequenz, i)'? –
Nun, da 'seed' eine Liste ist, bringt' sequenz = seed' nicht viel, so dass Sie diese Zeile entfernen können. Und da diese Liste von außen eingegeben wurde, muss sie möglicherweise nicht zurückgegeben werden. Speichern Sie einfach einen Verweis auf die Liste und geben Sie dann diesen Verweis ein, anstatt ein Literal zu verwenden. Das nimmt zumindest etwas von dem "Müll" weg. – TigerhawkT3
Ich verstehe nicht, was Sie mit rekursiven Sequenzgenerator meinen. –