我需要一個Python函數iterate(f, x)
創建一個迭代器返回值x,f(x),f(f(x)),f(f(f(x)))等(如,例如,Clojure's iterate
)。首先,我想知道:這是否已經存在於標準庫的某個地方,我只是想念它?當然,這是很容易與發電機來實現:使用遞歸函數itertools
def iterate(f, x):
while True:
yield x
x = f(x)
只是出於好奇:有沒有在Python,例如做這一個功能更強大的方式與一些itertools或functools魔術?
在Python 3.3這會工作
def iterate(f, x):
return accumulate(repeat(x), lambda acc, _ : f(acc))
,但看起來像一個虐待我。我能更好地做到這一點嗎?
我會說'累加()'版本就好了。 *兩個*版本都很好。 – 2013-03-26 12:07:15
對於'accumulate()'版本,我真的覺得很奇怪,因爲對於計算來說,x只需要* once *作爲種子,所以需要'repeat(x)'或類似的東西。 – embee 2013-03-26 12:36:03
@embee現在你提到它了,我也覺得很奇怪。作爲第一個解決方案最好的問題 – jamylak 2013-03-26 12:38:54