如何在使用发电机时修复tribonacci系列功能

问题描述 投票:0回答:1

以下是我在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))

不确定我错过了什么?任何帮助表示赞赏。

python-3.x
1个回答
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])
© www.soinside.com 2019 - 2024. All rights reserved.