5,913
社区成员
发帖
与我相关
我的任务
分享
刚学习 Python 中的生成器,要用生成器生成杨辉三角形。我写的生成器如下
def triangles():
result = [1]
while True:
yield result
resultcpy = result
result = []
resultcpy.insert(0,0)
for i in list(range(len(resultcpy)-1)):
result.append(resultcpy[i]+resultcpy[i+1])
result.append(1)
return "done"
如果执行以下语句
>>>g = triangles()
>>>next(g)
>>>next(g)
每次都能生成想要的结果,第一个输出为 [1],第二个输出为 [1,1],第三个 next(g) 输出为 [1,2,2]。但是如果执行以下语句,结果就是错的
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)
我的代码生成的结果是:
[0, 1]
[0, 1, 1]
[0, 1, 2, 1]
[0, 1, 3, 3, 1]
[0, 1, 4, 6, 4, 1]
[0, 1, 5, 10, 10, 5, 1]
[0, 1, 6, 15, 20, 15, 6, 1]
[0, 1, 7, 21, 35, 35, 21, 7, 1]
[0, 1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
希望生成的是:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
不知道到问题出在哪里了,只是觉得自己的代码既不优雅也不简练。辛苦各位大佬指点,非常感谢!
(网上有生成成功的答案,写得很好,但是不知道自己的错误在哪里,困于心,衡于虑,振作不起来...)