用Python输出一个杨辉三角的例子


Posted in Python onJune 13, 2014

关于杨辉三角是什么东西,右转维基百科:杨辉三角

稍微看一下直观一点的图:

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

杨辉三角有以下几个特点:

每一项的值等于他左上角的数和右上角的数的和,如果左上角或者右上角没有数字,就按0计算。
第N层项数总比N-1层多1个

计算第N层的杨辉三角,必须知道N-1层的数字,然后将相邻2项的数字相加,就能得到下一层除了最边上2个1的所有数字。 听起来有点像递归的思想,我们不妨假设我们已经知道N-1层的数字,来计算一下N层的数字吧。

def _yanghui_trangle(n, result):
    if n == 1:
        return [1]
    else:
        return [sum(i) for i in zip([0] + result, result + [0])]

上面代码中,result表示N-1层杨辉三角的数字。实习上,我们在列表2端各补了一个0,然后计算相邻项的和,就可以直接得到结果。

稍微完善一下代码:

def yanghui_trangle(n):
    def _yanghui_trangle(n, result):
        if n == 1:
            return [1]
        else:
            return [sum(i) for i in zip([0] + result, result + [0])]
    pre_result = []
    for i in xrange(n):
        pre_result = _yanghui_trangle(i + 1, pre_result)
        yield pre_result
if __name__ == "__main__":
    for line in yanghui_trangle1(5):
        print line

_yanghui_trangle可以用lambda的方式简写,但是可读性感觉会变差,所以还是保持现状好了。

tips: 上面的程序并没有考虑数据格式化的问题,也就是说输出不是完美的三角形。

鉴于最近在学习erlang,补上一个erlang版本的,性能上没有测试过,不过还是要惊叹于函数式语言的表达能力:

-module(yanghui).
-author(lfyzjck).
-export([triangle/1]).
triangle_next(P) ->
    lists:zipwith(fun(X, Y) -> X+Y end, [0|P], P ++ [0]).
triangle(1) ->
    [[1]];
triangle(N) ->
    L = triangle(N - 1),
    [H|_] = L,
    [triangle_next(H)|L].
Python 相关文章推荐
Python中使用动态变量名的方法
May 06 Python
python中去空格函数的用法
Aug 21 Python
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
python环境下安装opencv库的方法
Mar 05 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python代数式括号有效性检验示例代码
Oct 04 Python
Python 的 with 语句详解
Jun 13 #Python
python学习笔记:字典的使用示例详解
Jun 13 #Python
Python urlopen()函数 示例分享
Jun 12 #Python
python教程之用py2exe将PY文件转成EXE文件
Jun 12 #Python
Python struct模块解析
Jun 12 #Python
深度剖析使用python抓取网页正文的源码
Jun 11 #Python
python k-近邻算法实例分享
Jun 11 #Python
You might like
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
采用call方式实现js继承
2014/05/20 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
numpy 声明空数组详解
2019/12/05 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
优秀应届生推荐信
2013/11/09 职场文书
医学生自荐信
2013/12/03 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
工程师岗位职责规定
2014/02/26 职场文书
省文明单位申报材料
2014/05/08 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2014年党支部工作总结
2014/11/13 职场文书
个人优缺点总结
2015/02/28 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS