用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实现分割文件及合并文件的方法
Jul 10 Python
python3抓取中文网页的方法
Jul 28 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
对python中的iter()函数与next()函数详解
Oct 18 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
python实现矩阵打印
Mar 02 Python
python字符串Intern机制详解
Jul 01 Python
tensorflow模型转ncnn的操作方式
May 25 Python
Keras搭建自编码器操作
Jul 03 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 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中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
jquery each()源代码
2011/02/14 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python分治法定义与应用实例详解
2017/07/28 Python
python字典的遍历3种方法详解
2019/08/10 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
美术教学感言
2014/02/22 职场文书
学期个人工作总结
2015/02/13 职场文书
给朋友的道歉短信
2015/05/12 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
基石观后感
2015/06/12 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
六年级作文之关于梦
2019/10/22 职场文书
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js