杨辉三角的两种解法
在学习廖雪峰python教程中,“高级特性==>生成器”遇到杨辉三角的练习题,比较有意思。记录下掌握的两种解法。
1,前后补0
思路:上一行前后补0,每两个元素相加得到该行数列。
def triangles():
L = [1]
while True:
yield L
L = [sum(i) for i in zip([0]+L, L+[0])]
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)
2,后补0
思路:上一行后补0。
注意:在这里使用L[:],如果使用L会出错。由于Python是动态语言,在一次循环中使用L.append(0),yield L会出现L列表后面加0的情况。
def triangles():
L = [1]
while True:
yield L[:]
L.append(0)
L = [L[i-1] + L[i] for i in range(len(L))]
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)