【转】python打印杨辉三角的两种方法及详解

本文介绍了两种不同的生成杨辉三角的方法。方法一使用了zip函数和yield生成器来实现错位相加,方法二则通过列表操作实现了相同的功能。两方法各有特点,适合初学者学习递归与迭代。

两种方法的不同是体现在对杨辉三角的构建方式的理解不同导致。

方法一:

# [1, 2, 1]
#    [1, 2, 1]   错位相加后:
# [1, 3, 3, 1]   生成下一行。

def triangles():
    n = [1]
    while True:
        yield n
        n = [x+y for x,y in zip([0] + n,n+[0])]

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

关于yield的用法,参考:https://blog.youkuaiyun.com/mieleizhi0522/article/details/82142856讲的非常清晰。

zip函数就相当于前三行的注释体现的意思。

方法二:


def triangles():
    L = [1]              #定义L为一个只包含一个元素的列表
    while True:
        yield L          #定义为生成器函数
        L =[1] + [L[n] + L[n-1] for n in range(1,len(L))] + [1]

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

附:对此2处for循环的理解:将其理解为一个列表,只不过这个列表由迭代器生成,实际上不存在于内存中。

可以看此处:Python 生成器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值