刚学习 Python 中的生成器,要用生成器生成杨辉三角形。我写的生成器最终执行的结果是错误的,但是每次使用 next() 执行结果似乎是对的。不理解为什么,可能和 list 是可变的有关

刚学习 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]

不知道到问题出在哪里了,只是觉得自己的代码既不优雅也不简练。辛苦各位大佬指点,非常感谢!

(网上有生成成功的答案,写得很好,但是不知道自己的错误在哪里,困于心,衡于虑,振作不起来...)

...全文
72 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,913

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用python
社区管理员
  • Python 学习者
  • 嗨学编程
  • 松鼠爱吃饼干
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到Python学习者们的社区,

 

本社区分享你需要的文章、问题解答、技术互助、学习资源、面试系列等等

 

欢迎你的加入,祝你学有所成~

试试用AI创作助手写篇文章吧