Python:杨辉三角问题与生成器(generator)

>>最全面的Java面试大纲及答案解析(建议收藏)  

Python:杨辉三角问题与生成器(generator)

以前在廖大的网站上看到的题,寒假无聊,拿来做做,题目要求把杨辉三角每一行看成一个列表,写一个generator以输出每行。

看到这个图形后,我画了个草图(真草图,随便看看~):

Python:杨辉三角问题与生成器(generator)

我的思路是可以把原本的图形看成给每一行第一个和最后一个元素加上0,这样原本每行第a个元素就是加上0后的图的上一行第a与第a+1元素的和。

代码如下:

def triangles():    
   L = [1,]
   while True:
       yield L
       L = [0, *L, 0]
       L = [L[a] + L[a+1] for a in range(len(L) - 1)]

第五行在原本的列表L收尾加上了0,下一行使用了列表生成式,使新列表的每个第a个元素等于上一行列表添加0后的第a及第a+1个元素。

使用以下代码来验证一下:

n = 0
results = []
for t in triangles():
   print(t)
   results.append(t)
   n
= n + 1
   if n == 10:
       break
if results == [
   [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]
]:
   print('测试通过!')
else:
   print('测试失败!')

最后得到的输出结果符合期望。就不贴了。

是不是很有意思呢?大家可以自己试试写一下,不要求代码简洁,只要能实现功能就行了哦。

原文始发于微信公众号(公子政的宅日常):Python:杨辉三角问题与生成器(generator)