python杨辉三角

实现效果

[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]

Process finished with exit code 0

代码

def triangles(n=10):
    L = [1]

    for i in range(n):
        yield L
        L=[L[0]] + [L[j]+L[j+1] for j in range(len(L)-1)] + [L[-1]]

for data in triangles():
    print(data)

说明

参看python生成器的相关内容,可知在for迭代过程中,yield处断点并输出list类型的L,建议可结合调试分析论证。

关于表达式:
    L=[L[0]] + [L[j]+L[j+1] for j in range(len(L)-1)] + [L[-1]]
事实上,L[0]==L[-1]==1也就是杨辉三角每行的第一个元素和最后一个元素都是1,此处应该注意:对于list集合的添加,比如说:

print([1]+['fds'])

结果是:[1, ‘fds’],当然L[-1]必须放在表达式最后。
也就是说,我们可以简而言之:
    [L[j]+L[j+1] for j in range(len(L)-1)]
这个list集合与列表生成式有关,即在上一个list集合(L)根据L[i+1]=L[i]+L[i+1]进行计算(按顺序两两结合,共原长-1),注意结果仍然是list集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值