Ich brauche eine Python-Funktion iterate(f, x)
, die einen Iterator erstellt, der die Werte x, f (x), f (f (x)), f (f (f (x))) usw. zurückgibt (wie zB Clojure's iterate
). Zuallererst fragte ich mich: Gibt es das schon irgendwo in der Standardbibliothek und ich vermisse es nur? Natürlich ist es einfach genug, um mit einem Generator zu implementieren:Verwenden von itertools für rekursive Funktion Anwendung
def iterate(f, x):
while True:
yield x
x = f(x)
Nur aus Neugier: Gibt es eine funktionale Möglichkeit, dies in Python zu tun, zum Beispiel mit einigen itertools oder functools magie?
In Python 3.3 würde dies
def iterate(f, x):
return accumulate(repeat(x), lambda acc, _ : f(acc))
arbeiten, aber sieht aus wie ein Missbrauch zu mir. Kann ich das schöner machen?
Ich würde sagen, die 'accumulate()' Version nur in Ordnung ist. * Beide * Versionen sind in Ordnung. –
Was ich wirklich seltsam finde an der 'accumulate()' Version ist die Notwendigkeit für 'repeat (x)' oder etwas Ähnliches, weil x nur * einmal * als Grund für die Berechnung benötigt wird. – embee
@embee Jetzt, wo du es erwähnst, finde ich das auch komisch. Prob als die erste Lösung – jamylak