用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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python爬取Coursera课程资源的详细过程
Nov 04 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python只用40行代码编写的计算器实例
May 10 Python
matplotlib给子图添加图例的方法
Aug 03 Python
python中数组和矩阵乘法及使用总结(推荐)
May 18 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
Python读写yaml文件
Mar 20 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
德劲1104的电路分析与改良
2021/03/01 无线电
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
flash 得到自身url参数的代码
2009/11/15 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
js 走马灯简单实例
2013/11/21 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
Python实现控制台进度条功能
2016/01/04 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
python机器学习实战之树回归详解
2017/12/20 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
Python用户自定义异常的实现
2020/12/25 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
2014年社区工会工作总结
2014/12/18 职场文书