我需要一个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