用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 25 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
Django权限机制实现代码详解
Feb 05 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
Python 必须了解的5种高级特征
Sep 10 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 Python
Python list列表删除元素的4种方法
Nov 01 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计算两个文件相对路径的方法
2015/03/14 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
PHP进程通信基础之信号
2017/02/19 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
实例讲解PHP表单
2020/06/10 PHP
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
python del()函数用法
2013/03/24 Python
Python常用模块用法分析
2014/09/08 Python
理解Python中函数的参数
2015/04/27 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
查看django版本的方法分享
2018/05/14 Python
numpy库reshape用法详解
2020/04/19 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
资深地理教师自我评价
2013/09/21 职场文书
求职简历自荐信
2014/06/18 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
英雄儿女观后感
2015/06/09 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技