用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中用于计算对数的log()方法
May 15 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
python使用selenium实现批量文件下载
Mar 11 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
基于Pytorch SSD模型分析
Feb 18 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python可视化神器pyecharts绘制地理图表
Jul 07 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 win下Socket方式发邮件类
2009/08/21 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
php学习笔记之面向对象
2014/11/08 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
代码详解django中数据库设置
2019/01/28 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
护士自荐信范文
2013/12/15 职场文书
小学教师师德反思
2014/02/03 职场文书
新春文艺演出主持词
2014/03/27 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
思想作风建设心得体会
2014/10/22 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
个人总结与自我评价
2015/02/14 职场文书
求职自荐信怎么写
2015/03/04 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript
在CSS中使用when/else的方法
2022/01/18 HTML / CSS