python_生成器(杨辉三角为例)

'''
Description: 
Version: 2.0
Author: xuchaoxin
Date: 2021-02-01 09:33:06
LastEditors: xuchaoxin
LastEditTime: 2021-02-01 10:35:58
'''
def triangles():
    """产生杨辉三角列表行(python生成器的演示)

    Yields:     
        [list]: [description]
    """    
    """ 定义列表ret(初始其中的元素化为1),ret中只保存整形数 
    pre列表表示上一行杨辉三角的元素所构成的列表"""
    ret = [1]
    while True:
        """ 每次生成器返回结果的地方 """
        yield ret
        """ 深复制一份ret列表,并作为pre初始引用值 """
        pre=ret[:]
        for i in range(1, len(ret)):
            """ 根据杨辉三角的递推规则来更新列表ret:
            即ret[i]=pre[i]+pre[i-1]
            由于i是列表[1,2,...,len(ret)]中取出的元素,可以作为ret的索引
            注意, list(range(1,1)) 的结果是空列表[];所以第一轮循环不会进入执行
            则有i-1=0,1,2,...,len(ret)-1 """
            ret[i] = pre[i] + pre[i - 1]
        """ 为ret列表的末尾添加一个固定元素:1 """
        ret.append(1)
        """ pre列表表示上一行杨辉三角的元素所构成的列表
        更新pre列表(将ret中的值赋值一份给pre),进行地推(迭代) """
        pre = ret[:]

for n in triangles():
    if(len(n)>7):
        break
    print(n)

猜你喜欢

转载自blog.csdn.net/xuchaoxin1375/article/details/113500655