廖雪峰老师博客学习《通过生成器generator生成列表式杨辉三角》
- 说明:这是我接触生成器概念后,自己对它的理解,可能比较表面,没深入理解,也可能有错误。后续校正错误认知,将有关generator作为一个tag了!
- 希望以后能活用。
- 先贴出自己写的triangles()生成器,习题需求查看url页面最后:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000
#在线编辑器真难用!!
# /usr/bin/env python3
# coding:utf-8
# author:zhangjiaqi<1399622866@qq.com> def triangles():
lt = [1]
while True:
yield lt
if lt.__len__() == 1:
lt.append(1)
else:
len = lt.__len__()
tmplist = [v for v in range(len-1)] #构建一个临时列表,临时列表相较于最后生成,去掉了头尾。
for n in range(len-1):
tmplist[n] = lt[n] + lt[n+1]
lt = [1] + tmplist + [1] if __name__ == '__main__':
g = triangles()
for i in range(10):
print(next(g))- 运行结果
[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]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
- 思路:
- 首先,杨辉三角,除了第一行和第二行之间没发现规律,就已特例直接产生
- 然后,从第三行开始,出去头尾的元素,中间元素是前一行列表元素两两的和,那么我就构造一个中间元素的临时列表,然后根据前一行列表产生临时列表的值
- 最后,给中间元素列表头尾添加上[1],这样就产生了后续列表的算法。
- 别人的思路:网上的思路是发现这样一个算法规律:后一行是用前一行构造两个分别是头尾加上[0]的列表,然后两个列表zip()一下。就得到需求列表。
- 思路不同,用到的实现手法就不同。
- 见识了zip()的应用。什么叫人生苦短,****!
- 自己的思路就没那么简洁。
- 解剖一下和生成器generator有什么好处(比较表面):
- 从产生和存放杨辉三角的角度,来说说generator:triangles()函数完全可以不用yield,例如通过一个行数参数打印输出一个杨辉三角(这就需要在一个变量来存放一个完整的杨辉三角,最后再return整个杨辉三角)。使用yield,函数就返回了一个生成器对象,这个对象又是可迭代的,通过迭代再输出杨辉三角。前者通过函数时就生成了杨辉三角存放到内存中,然后从打印输出;后者这是一边生成一遍输出,根本就没有在内存中存放完整的杨辉三角。可以说生成器就是节约内存存储空间。
- 看到上面,有人就会说了,就算不是使用生成器,将函数只返回指定的行,然后再循环调用输出,就不用在内存中存放一个完整的。确实,但是生成器还有一个特点就是可迭代,直接就可以用for 语句,那就是可迭代的优点了。
- 初学 者能力有限,感觉自己也没真正解剖出来。
廖雪峰老师博客学习《通过生成器generator生成列表式杨辉三角》的更多相关文章
- 201771030103-陈正丽 实验一 软件工程准备—<快速浏览 邹欣老师博客—读后感>
项目 内容 <软件工程> 代祖华老师博客 作业要求 邹欣老师博客 学习目标 具体目标 在大概阅读邹欣老师的博客时,发现老师写了关于很多方面的内容,有基础的也有比较深奥的,这次阅读过程中主要 ...
- 根据学习廖雪峰老师的git教程做的笔记
根据学习廖雪峰老师的git教程做的笔记 安装git 进行git的配置 配置您的用户名和邮箱地址,使用--global 这个参数表明了在此台机器上的所有仓库都会使用该配置 $ git config -- ...
- 廖雪峰 Git 教程 + Git-Cheat-Sheet 学习总结
廖雪峰 Git 教程 + Git-Cheat-Sheet 学习总结 本教程主要是个人的 Git 学习总结. 主要参考博客: 廖雪峰 Git 教程 Git-Cheat-Sheet 文章目录 廖雪峰 Gi ...
- git常用命令总结--廖雪峰老师Git教程命令总结
学习了廖雪峰老师的Git教程之后的命令总结,重点关于git和远程仓库的东西. 如果没有学过,这是传送门 下面这个图很重要 一.git初始化本地仓库和配置 echo "想输入到文件的内容,一般 ...
- git入门(廖雪峰老师)
根据廖雪峰老师的git教程进行学习总结: 1.之前上班用的都是svn进行管理,那么svn和git有什么区别呢? svn是集中式的版本控制系统,而git是分布式版本控制系统,那么集中式和分布式版本控制系 ...
- python老师博客
前端基础之HTML http://www.cnblogs.com/yuanchenqi/articles/6835654.html 前端基础之CSS http://www.cnblogs.com/yu ...
- FPGA一个博客学习
FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM
- 《廖雪峰 . Git 教程》学习总结
基本上,Git就是以下面的命令顺序学习的.文中笔记是从廖雪峰老师的 Git教程 中总结出来的,方面查阅命令. 1.基础 git config --global user.name "Your ...
- jekyll 将纯文本转化为静态网站和博客 静态网站生成器
jekyll 将纯文本转化为静态网站和博客 静态网站生成器 这个貌似对windows 支持不是很好~ 但是有支持,官方说不建议使用
随机推荐
- LeetCode编程训练 - 拓扑排序(Topological Sort)
拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...
- java 23种设计模式 深入理解【转】
以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive ...
- CSS怎么在项目里引入自定义字体(@font-face)
前言: 以前我一直用内置的默认字体给文字设置字体,直到一天UI妹纸给了我下面的字体 当时我是蒙蔽的,这个字体的效果如下 默认字体并无该字体,直接设置是没有效果的,这时就需要用到自定义字体了 下面 ...
- [Swift]LeetCode849. 到最近的人的最大距离 | Maximize Distance to Closest Person
In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is emp ...
- [Swift]LeetCode863. 二叉树中所有距离为 K 的结点 | All Nodes Distance K in Binary Tree
We are given a binary tree (with root node root), a targetnode, and an integer value K. Return a lis ...
- python +selenium识别不来click事件,出现报错
assert "login" in browser.title browser.implicitly_wait(10) elem = browser.find_element_by ...
- 祝雷(依乐祝):一份来自29岁.NET老程序员的自白
潘老师的文笔果然了得,经过潘老师的妙笔生花后,文章的阅读体验果然好了很多!这里再次感谢潘老师的支持! 祝雷(合肥.NET 俱乐部发起人) [个人介绍] 博客园知名博主(依乐祝).6年以上.NET技术栈 ...
- 死磕 java集合之CopyOnWriteArrayList源码分析
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过 ...
- C#使用Windows Service
前言:Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新 ...
- (五)通过Python的select监控多个描述符实现并发连接
概述 本文通过使用select改写之前的服务器程序通过监控多个套接字描述符来实现并发连接并加入了一些机制让程序更加健壮,不过我们所有的实验都是建立在单词发送数据不会超过1024字节,如果超过你需要做特 ...