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

⊙▽⊙我是不会告诉你秘密的! ⊙▽⊙我是不会告诉你秘密的! 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

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

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

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

...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部