用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实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
编写Python CGI脚本的教程
Jun 29 Python
python 二分查找和快速排序实例详解
Oct 13 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
Python登录注册验证功能实现
Jun 18 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
Python+Redis实现布隆过滤器
Dec 08 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 Python
python实现简单的聊天小程序
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
一个显示天气预报的程序
2006/10/09 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
jquery 日期分离成年月日的代码
2010/05/14 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
python实现简单的socket server实例
2015/04/29 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
如何进行Linux分区优化
2013/02/12 面试题
《乌塔》教学反思
2014/02/17 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
导游词400字
2015/02/13 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
千手观音观后感
2015/06/03 职场文书
退伍军人感言
2015/08/01 职场文书
礼貌问候语大全
2015/11/10 职场文书
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫