generator输出杨辉三角(python)

最近在学廖雪峰老师的python教程,做下练习方便查询:
杨辉三角定义如下:

      1
     / \
    1   1
   / \ / \
  1   2   1
 / \ / \ / \
1   3   3   1

把每一行看做一个list,试写一个generator,不断输出下一行的list:

# 期待输出:
# [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

def triangles():  
    L=[1]  
    yield L  
    while True:  
        L=[1]+[L[x]+L[x+1] for x in range(len(L)-1)]+[1]  
        yield L  

n=0  
for L in triangles():  
    print(L)  
    n=n+1  
    if n==10:  
        break

generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。

要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。
请注意区分普通函数和generator函数,普通函数调用直接返回结果:

>>> r = abs(6)
>>> r
6
generator函数的“调用”实际返回一个generator对象:

>>> g = fib(6)
>>> g
<generator object fib at 0x1022ef948>
    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/Dream_Han/article/details/80601888
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞