使用发电机时如何修复Tribonacci系列函数

时间:2019-03-27 03:50:19

标签: python-3.x

以下是我返回Tribonacci系列中的n元素的方法

def tri(n,seq = [1, 1, 1]):
   for i in range(n-2):
      seq = seq[1:] + [sum(seq)]
   return seq[-1]

通过print()传递参数时,我得到正确的结果。

print(tri(10))

输出:193

但是,在使用generator(using repl.it)时,出现了can only concatenate tuple (not"list") to tuple的错误

我正在使用下面的发电机

def tri_generator():    
for i in range(1000):        
    yield (i, (1, 1, 1))
    yield (i, (1, 0, 1))
    yield (i, (1, 2, 3))

不确定我缺少什么?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这是一个简单的生成器(您可以根据需要清理代码)

def tri_generator():
    i = 0
    seq = [1, 1, 1]
    while True:
        seq = [seq[1], seq[2], seq[0] + seq[1] + seq[2]]
        yield i, seq
        i += 1  

    n = 10
    xx = tri_generator()
    for i in range(n - 2):
        print(next(xx))  

## Output:
## (0, [1, 1, 3])
## (1, [1, 3, 5])
## (2, [3, 5, 9])
## (3, [5, 9, 17])
## (4, [9, 17, 31])
## (5, [17, 31, 57])
## (6, [31, 57, 105])
## (7, [57, 105, 193])