用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实现115网盘自动下载的方法
Sep 30 Python
Python中的ConfigParser模块使用详解
May 04 Python
Python中random模块用法实例分析
May 19 Python
在Django中编写模版节点及注册标签的方法
Jul 20 Python
selenium+python实现1688网站验证码图片的截取功能
Aug 14 Python
python查看模块,对象的函数方法
Oct 16 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
python覆盖写入,追加写入的实例
Jun 26 Python
python爬虫 爬取超清壁纸代码实例
Aug 16 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
Python 实现一个计时器
Jul 28 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 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
多重?l件?合查?(一)
2006/10/09 PHP
劣质的PHP代码简化
2010/02/08 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
Vue表单实例代码
2016/09/05 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
详解Python中with语句的用法
2015/04/15 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
Python匿名函数及应用示例
2019/04/09 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
python实现PID算法及测试的例子
2019/08/08 Python
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
材料加工工程求职信
2014/02/19 职场文书
公务员培的训心得体会
2014/09/01 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
2015年煤矿工作总结
2015/04/28 职场文书