Python打印杨辉三角-生成器语法yield的理解
###先看代码。
def triangles():# 定义最初的数据 1 ,存到列表中lt = [1]# 进入循环while True:# 使用yield语句产生一个生成器,返回当前列表yield lt# 列表后追加元素 0lt.append(0)# 列表生成式:原列表中前一项与后一项相加lt = [lt[i - 1] + lt[i] for i in range(len(lt))]n = 0
for i in triangles():print(i)n += 1if n == 10:break
OUT:
[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]
###杨辉三角分析
- 第一行的数据为
1
。 - 往下每一行比上一行多一个元素。
- 下行中的数据都是上行中对应的两元素之和,如果只有一个元素,则视为该元素与0之和。
###代码解析:
- 在方法中,先定义最初的数据
1
,存到列表中lt = [1]
。 - 随后进入循环,使用yield语句产生一个生成器,返回列表
lt
。 - 此时,代码初次执行到此处,不会再向下执行。
- 在源代码下部循环中,第二次执行到
triangles
方法时,会从第一次的断点,也就是yield lt
之后开始执行。 - 此时,在列表后追加一个元素
0
。 - 利用列表生成式,将原列表中前一项与后一项相加(其中第一项与最后一项相加),产生一个新列表命名为
lt
覆盖原列表。 - 再次进入循环时,代码执行到
yield lt
语句,将最新的列表返回。 n
为循环控制条件。
###语言描述比较抽象,我们逐步分析数据变化。
- 首先方法的定义,不会执行。将
0
赋值给n
后,直接进入循环,遍历triangles
方法返回的生成器对象,此时lt = [1]
,triangles
方法中的代码执行到yield lt
被阻塞,循环中接下来执行print
语句打印[1]
为第一行,n
的值变为1。 - 再次进入循环,从
yield lt
后面开始执行,lt.append
语句将lt
从[1]
变为[1, 0]
。 - 列表生成式中,循环次数是
len(lt)
为2,i
初始值为0,所以新列表的第一个值为lt[i - 1] + lt[i]
即lt[-1] + lt[0]
,为1;接下来i
为1,新列表的第二个值为lt[0]+lt[1]
,为1。至此列表生成式执行结束,新列表为[1, 1]
。for循环中print
语句将lt
打印,n
的值为2,不满足小于10的条件,继续循环。 - 此时进入循环,同样从
yield lt
后面开始执行,lt.append
语句将lt
从[1, 1]
变为[1, 1, 0]
。 - 列表生成式中,循环次数是
len(lt)
为3,i
初始值为0,所以新列表的第一个值为lt[i - 1] + lt[i]
即lt[-1] + lt[0]
,为1;i
为1时,新列表的第二个值为lt[0]+lt[1]
,为2;i
为2,新列表的第二个值为lt[1]+lt[2]
,为1。至此列表生成式执行结束,新列表为[1, 2, 1]
。for
循环中print
语句将lt
打印,n
的值为3,不满足小于10的条件,继续循环。
至此,Python中杨辉三角的实现已经全部完成,其中最重要的点就是关于yield
语句的使用与执行状况分析。此处引用(作者:千若逸|链接:https://www.jianshu.com/p/d09778f4e055|來源:简书):
yield
是一个类似 return
的关键字,迭代一次遇到yield
时就返回yield
后面(右边)的值。重点是:下一次迭代时,从上一次迭代遇到的yield
后面的代码(下一行)开始执行。
简要理解:yield
就是 return
返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。
Python打印杨辉三角-生成器语法yield的理解相关推荐
- 用python打印杨辉三角
杨辉三角的形式如下图(图片来自维基百科)所示: 用列表的形式呈现如下: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, ...
- python杨辉三角居中_利用python打印杨辉三角
用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...
- python打印杨辉三角,直角形和正三角形的杨辉三角
一.编程题目 编程题目:python编程实现,打印直角形的杨辉三角,要求输入一个正整数n,表示打印的杨辉三角形层数,输入杨辉三角.在此基础上,实现打印正三角形的杨辉三角 二.输入输出样 ...
- python代码打印杨辉三角_python打印杨辉三角
原博文 2020-03-24 18:03 − python打印杨辉三角 ```python def transfor(fun): # 定义一个转换函数, def war(N): # 带参数的装饰器,把 ...
- Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。
Python中使用for while循环打印杨辉三角练习(列表索引练习). 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 ...
- python每行输出5个数_python打印杨辉三角及输出第m行第k个数
1.打印杨辉三角及输出第m行第k个数 1.计算到m行,打印出k项 第m行有m项,m是正整数,因此k一定不会大于m,这个需求需要保存m行的数据,那么可以使用一个嵌套结构[[],[],[]] m=int( ...
- python杨辉三角代码,python实现杨辉三角的几种方法代码实例
方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ trian ...
- 多种语言多种方法打印杨辉三角(二项式展开式各项系数)
打印杨辉三角&二项式展开式各项系数 C语言实现 法一:数学排列组合公式法 法二:找规律法,二维数组,通俗易懂 法三:法二优化,一维数组 法四:递归 Java实现 Python实现 (a + b ...
- python语言输入杨辉三角_?新手求教:请问怎样用python 显示杨辉三角,任意输入一个数N,输出一个N 1层的杨辉三角。...
如何用python输出杨辉三角 iangles里用到了yield,yield 的作用就是把一个函数变成一个 generator 用python语言输出九九乘法表 杨辉三角 求代码 1.九九乘法表def ...
最新文章
- 在阿里做科研是一种什么感受?
- 跟我学大数据分析之四:“钱”去哪儿了?
- Cordova 本地项目创建方法
- asa防火墙升级固件_奇淫巧技 | 在路由器中添加策略,阻止电视系统升级
- Git 修改分支的名称(亲测)
- haproxy详细介绍
- 精通ASP.NET MVC——控制器和动作
- [詹兴致矩阵论习题参考解答]习题1.11
- 来尝个鲜,Python3.8几大新功能体验,冲鸭!
- 软件开发常用设计模式—单例模式总结(c++版)
- java怎么反编译_java如何进行反编译
- 什么时候都要记得:生活愈是往下,嘴角愈要上扬
- python cox回归_TCGA+biomarker——多因素Cox回归
- 使用 f2py 包装 Fortran MPI 程序
- mt6735 [AT Command] AP下发AT+CLAC命令后 ,手机出现宕机
- UVA1025 Thematic Contests
- 【洛谷】P1138 第k小整数
- Spatial-Spectral Transformer for Hyperspectral Image Classification
- CAD制图初学入门 零基础学CAD要掌握技能精选
- UVA11021 Tribles 概率