递归序列生成器

时间:2016-10-10 01:11:33

标签: python

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]

1 个答案:

答案 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]

最后一个是你想要的。