*说明:杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。


实现方法生成器(generate),详见:廖雪峰_python生成器。

记一下生成器的关键点

1、

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量有限。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

将列表元素按照某种算法推算出来,这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。


生成器的概念,如下图所示,生成器g就是用来生成x的平方的东西,结果存在显示的内存地址里。

但是由于你还没说你到底要谁的平方,所以只能看到个地址不能看到答案。

L则不同,它是把所有答案穷举列在内存里了,你需要哪个就从里面找出来即可,比较耗费资源。而g则还没生成,需要哪个我现制造一个出来放在一个内存空间显示,节省了资源。

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

创建列表和生成器的区别仅在于最外层的[]()L是一个list,而g是一个generator。

2、

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。

(理解生成器的执行很关键,多多思考,动手试一下)

生成器和函数的执行流程是不一样的。函数是顺序执行,遇到return语句或最后一行函数语句就返回。而生成器在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处执行。

如果需要生成器返回(下一个)值,需要调用.next()函数。其实当系统判断def是生成器时,就会自动支持.next()函数。

上一个例子看一下(例子转自博主,请见:yield理解)


def fib(max):a, b = 1, 1while a < max:yield aa, b = b, a+bfor n in fib(15):print nm = fib(13)
print m
print m.next()
print m.next()
print m.next()

fib()函数因为含有yield,被系统默认为是一个生成器。

for语句调用了fib(15)。当max=15时,进入fib()生成器,执行到yield a, 返回a值以及整个生成器暂停的状态,将a值赋给n, 打印出来;因为是for语句循环,所以又回到fib(15)语句,由于是生成器,因此从上次截断的位置开始执行,b值赋给a, a+b值赋给b,又因为是while语句,则继续while循环,yield a值,循环暂停跳出返回a值及生成器状态,把a值赋给n, 打印n。如此往复,一直循环到15结束。

m被赋了fib(13)这个生成器,每一次执行m.next()函数就会打印下一个值。

运行结果如下:



有了这些基础就可以考虑实现杨辉三角了,杨辉三角有几个特点:

1、每个数都等于它上方两数之和;

2、每行数字开头结尾都是1,左右对称;

3、数形的实质就是二项式定理,第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数;第n行的数字有n项;第n行数字和为2n-1。(忘记二项式可以移步百科--->二项式定理)。


思路:

我们把每一层看作一个list, 通过一个for循环,通过迭代,每次生成一个list,而生成器就在每一行生成list中起作用。

我们先定义一个函数yanghui_trigangle,作用是生成每一行的list,再通过for循环调用即可得到结果。

方法一:

以上为range函数容易混淆的地方。

#!/user/bin/env.python
# _*_ coding:utf-8 _*_
# _author:poiuyds# 方法1
def yanghui_triangle():L = [1]while True:yield L# list(range(a,a))的输出为空L = [1] + [L[i-1] + L[i] for i in range(1,len(L))] + [1]#if __name__ == ' __main__':
n = 0
for i in yanghui_triangle():print(i)n += 1if n > 10:break

输出如下:

[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, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]

方法二:

# 方法2
def yh_triangle():L = [1]while True:yield LL.append(0)# i所生成的每一项就是列表的一项L = [L[i-1] + L[i] for i in range(len(L))]n = 0
for i in yh_triangle():print(i)n += 1if n > 10:break

输出如下:

[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, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]

4、杨辉三角(帕斯卡三角)_python版本相关推荐

  1. js算法:杨辉三角(帕斯卡三角)

    什么是杨辉三角(帕斯卡三角): 数学之美:杨辉三角(帕斯卡三角)的奇特性质 百度百科 实现思路 根据上一行计算下一行,需要实现 type calculateNext = (row: number[]) ...

  2. python杨辉三角编程_Python基础练习实例49(打印杨辉三角)

    杨辉三角(也称帕斯卡三角),它是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和. 题目:打印出杨辉三角形(要求打印出10行如下图). 分析: 把每一行看作一个列 ...

  3. python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码

    Python极简代码实现杨辉三角示例代码 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list ...

  4. 帕斯卡三角形html,数学之美:杨辉三角(帕斯卡三角)的奇特性质

    杨辉三角(也称帕斯卡三角)相信很多人都不陌生,它是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和. 杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数 ...

  5. 数学之美:杨辉三角(帕斯卡三角)的奇特性质

    杨辉三角(也称帕斯卡三角)相信很多人都不陌生,它是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和. 杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数 ...

  6. python创建和显示任意行数的杨辉三角/帕斯卡三角(函数)

    def create_psc_triangle(line_num):"""创建杨辉三角(帕斯卡三角):param line_num: 行数:return: 存储杨辉三角的 ...

  7. python杨辉三角居中_python打印杨辉三角的两种方法及详解

    艾斯压阵 1c950a7b02087bf4200394cdf1d3572c11dfcf23.jpg 一盏灯, 一片昏黄: 一简书, 一杯淡茶. 守着那一份淡定, 品读属于自己的寂寞. 保持淡定, 才能 ...

  8. 杨辉三角/帕斯卡三角

    杨辉三角,又叫帕斯卡三角形,是一个三角形矩阵,其顶端是 1,视为(row0).第1列(row1)(1&1)两个1,这两个1是由他们上头左右两数之和 (不在三角形内的数视为0).依此类推产生第2 ...

  9. python杨辉三角解释_python杨辉三角

    直接上代码,也是网上找的,自己试了试,很好玩,记录一下: def triangles(): L = [1] while True: yield L L.append(0) L = [L[i-1]+L[ ...

  10. python写等腰三角形的性质_杨辉三角—知识点详解 - osc_8cfq8uoa的个人空间 - OSCHINA - 中文开源技术交流社区...

    杨辉三角 杨辉三角(欧洲叫帕斯卡三角)是一个很奇妙的东西,它是我国数学家杨辉在1261年发现的,欧洲的帕斯卡于1654年发现,比我国的巨佬数学家杨辉晚了393年.(在此show一下我的爱国情怀) 铺垫 ...

最新文章

  1. asch相关的linux基础知识分享
  2. 大连东软信息学院计算机专业19分数线,2021大连东软信息学院录取分数线_历年各专业分数线(2017-2020),各省投档线_一品高考网...
  3. MyBatis 与 Hibernate
  4. 题库明细 使用HTML+CSS开发商业站点
  5. 29.C++- 异常处理
  6. 如何用C语言测试,C语言单元测试CMock使用(一) 基本用法
  7. 【报告分享】2021年中国五大主流电商平台关于用户数据的最新规则汇总.pdf(附下载链接)...
  8. C++ Template 使用简介
  9. 蓝桥杯 历届试题 剪格子(dfs搜索)
  10. python服务器查看文件更改记录,python 查看远程服务器上的文件
  11. 运营人员消消气,这个工具让数据分析轻松驾驭
  12. 打印机共享与文件夹win10共享教程
  13. 四轴锁付程序,三菱FX5U发脉冲控制主轴,与好伙伴伺服电批进行MODBUS485通讯
  14. Mac系统搭建C语言开发环境
  15. 《解忧杂货店》读后感:路一直都在,进步就是幸福
  16. 2020年,抖音赚钱全攻略,做抖音,看这就够了!
  17. unity2D动画-角色切片与2DAnimation插件做动画
  18. 万马股份旗下万马爱充遭通报下架:违规收集个人信息,未及时整改
  19. 计算机色颜色有几种,电脑显示器怎么选?10、8、6bit不同色深都有哪些区别?...
  20. 基于JAVA鞋店销售管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署

热门文章

  1. 宽屏html5网络科技有限公司官网单页面响应式模板
  2. 众昂矿业:有关于萤石的含氟精细化学品领域
  3. 2023最新火麒麟打赏系统完整源码/内置打赏系统+防封接口
  4. Java8中Stream的学习以及实际使用教程
  5. 我做过超市里的收银员
  6. api接口通达信系统怎样开发量化回测及K线的显示买卖点程序?
  7. jboss的安装以及配置
  8. 远程FPGA虚拟实验平台用SystemVerilog HDL实现七段译码器
  9. python字符串常量_常用的Python字符串常量
  10. Tribon数据库结构研究