Python是否具有递归序列生成功能?例如,
def generateSequence(seed, f, n):
sequence = list(seed)
for i in range(n):
sequence.append(f(sequence, i))
return sequence
可以这样使用:
fibSequence = generateSequence([0, 1], lambda x, i: x[-1] + x[-2], 8)
生产:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
答案 0 :(得分:0)
我认为itertools.accumulate
可能符合您的需求,但它的返回值可能与您的预期不同。
例如:
#!/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)
[0, 1]
是初始序列,8
是您想要调用callback
函数的次数。
以上代码的结果如下:
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]
最后一个是你想要的。