杨辉三角实现(Python)

发表时间:2020-09-07

1、先看杨辉三角的输出结果:

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

2、思考过程:

将整个输出图形,可以认为是行列元素组成的。

整个思路的核心简单来说,除了首尾元素是1之外,其它元素的计算思路就是:[row][col]= [row-1][col-1]+[row-1][col]

举个例子:第四行的输出结果是:1,3,3,1,而第三行的输出结果是:1,2,1

除了首尾两个元素是1之外,3其实是上行元素1与2的和,另一个3是上一行元素2与1的和。

但是,用python实现这个过程,和其它语言有点差异性,比如Java、c++,它们都有二维数组可以使用,但是Python却没有,所有有点头疼。但是,Python有列表,每行元素可以通过列表输出。那么,具体实现过程是怎么样的呢?

3、代码实现

def triangle():
	#第一行元素就是一个1
    line = [1]   
    # 循环输出每行的元素列表
    while True:
        yield line
        # 生成下一行,表达式为 : [1] + 上一行的两个元素之和 + [1]
        line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1]

# 控制输出行数
n = 0    
# 由于triangle()其实是一个生成器Iterator,因此可以使用for循环遍历输出
for item in triangle():
    print(item)
    n += 1
    # 输出10行的时候就结束
    if n % 10 == 0:
        break

4、代码分析

整个实现过程中是通过yield关键字定义生成器来实现的。
其中, line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1] 是理解的关键。
非常巧妙,既有列表的拼接操作,同时又使用了列表生成式,代码很简洁,但理解起来却不容易。

可以去取某个实例来理解:

比如,现在要输出第四行元素,怎么处理呢?

第三行元素是1,2,1

那么,len(line)此时是3,range(len(line)-1)的结果元素是0,1

当i = 0 时,line[i] + line[i+1] = 1+2 = 3

当i = 1 时,line[i] + line[i+1] = 2+1 = 3

在这里,range()的返回结果是从0开始的,而不是1,因此列表的元素索引也是从0开始的

最后,再利用列表拼接,将首尾的1连接起来,就得到了我们想要的本行元素列表

同样,其它行的元素也是这样的操作,那么,在外围添加一个循环条件: while True

每次输出本行元素列表,然后计算下行元素列表,循环进行。

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号-4
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free