刚学习 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]
不知道到问题出在哪里了,只是觉得自己的代码既不优雅也不简练。辛苦各位大佬指点,非常感谢!
(网上有生成成功的答案,写得很好,但是不知道自己的错误在哪里,困于心,衡于虑,振作不起来...)
...全文
相关推荐
浅谈Python生成器generator之next和send的运行流程(详解)
下面小编就为大家带来一篇浅谈Python生成器generator之next和send的运行流程(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
python列表生成式与列表生成器的使用
本篇文章主要介绍了python列表生成式与列表生成器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Python通过for循环理解迭代器和生成器实例详解
主要介绍了Python通过for循环理解迭代器和生成器,结合实例形式详细分析了迭代器和生成器的概念、原理、使用方法及相关操作技巧,需要的朋友可以参考下
python 协程中的迭代器,生成器原理及应用实例详解
主要介绍了python 协程中的迭代器,生成器原理及应用,结合具体实例形式详细分析了Python协程中的迭代器,生成器概念、原理及应用操作技巧,需要的朋友可以参考下
浅析Python生成器.pdf
浅析Python生成器


