最近跟着廖雪峰老师的教程进行学习python,在做生成器的练习题时,发现自己的思路还有待拓展,跟其他学习的大佬比起来还有较大的差距,因此记录下来用作复习。
ps:本块代码是看了廖雪峰老师教程上MeanCoder的作业。。。
o(╯□╰)o,虽然自己写了出来,但是要复杂太多,就不贴出来了。
杨辉三角定义如下:
1
/ \
1 1
/ \ / \
1 2 1
/ \ / \ / \
1 3 3 1
/ \ / \ / \ / \
1 4 6 4 1
/ \ / \ / \ / \ / \
1 5 10 10 5 1
把每一行看做一个list,试写一个generator,不断输出下一行的list:
# -*- coding: utf-8 -*-
def triangles():
x=[1]
while True:
yield x
x=[0]+x+[0] #首尾加0 ,用以计算边界值
x= [ x[i] + x[i+1] for i in range(len(x)-1)]
以下也是教程中的AnimaOcean提供的帮助,说的挺简单明了,就直接搬用了;
x = [0]+x+[0] 首尾加0,用于边界的计算
x = [x[i]+x[i+1] for i in range(len(x)-1)] 循环生成list,最后赋值给l
x[i]+x[i+1] 前一个值和后一个值相加计算出下一个值
for i in range(len(x)-1) 循环获取生成的索引值
range(len(x)-1) 获得l的全部索引值,因为计算方式是当前值和后一个值相加,避免尾部越界所以要减一
拆开就是这样的
def triangles():
x = [1]
while True:
yield x
x = [0]+x+[0]
g = []
for i in range(len(x)-1):
g.append(x[i]+x[i+1])
x = g
感谢廖雪峰老师以及那两位同学。。。