廖雪峰老师博客学习《通过生成器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 支持不是很好~ 但是有支持,官方说不建议使用
随机推荐
- 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图
先上结果: 之前 在公司业务中用过java+Selenium+ChromeDriver ,使用起来非常顺手,可以完美模拟真实的用户浏览行为.最近休息的时候想用C#也试一下,于是有了本文. 实现原理一样 ...
- 基础:新建个maven项目
首先在电脑上配置好Maven环境 第一步:在Eclipse中选择创建Maven Project Next Next Finish 创建好后项目结构如下: 第二步:讲项目转为Web项目,右键项目点击pr ...
- [Swift]LeetCode671. 二叉树中第二小的节点 | Second Minimum Node In a Binary Tree
Given a non-empty special binary tree consisting of nodes with the non-negative value, where each no ...
- Ceres Solver 在win8+vs2013环境下的安装
参考博文:https://blog.csdn.net/wzheng92/article/details/79504709
- C#中为什么会出现空静态构造方法的写法
再过几个小时,就要回家过春节了,今天说些简单点的东西,大家在看C#代码的时候,一定会对这样的写法非常迷茫:在一个类中会出现一个空的静态构造方法.这不是多此一举吗,这样做的目的是什么?今天我就来说说这个 ...
- SpringCloud(8)---zuul权限校验、接口限流
zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...
- asp.net core系列 35 EF保存数据(2) -- EF系列结束
一.事务 (1) 事务接着上篇继续讲完.如果使用了多种数据访问技术,来访问关系型数据库,则可能希望在这些不同技术所执行的操作之间共享事务.下面示例显示了如何在同一事务中执行 ADO.NET SqlCl ...
- redis 系列22 复制Replication (下)
一. 复制环境准备 1.1 主库环境(172.168.18.201) 环境 说明 操作系统版本 CentOS 7.4.1708 IP地址 172.168.18.201 网关Gateway 172. ...
- Python爬虫入门教程 17-100 CSD*博客抓取数据
写在前面 写了一段时间的博客了,忽然间忘记了,其实CSD*博客频道的博客也是可以抓取的,所以我干了..... 其实这事情挺简单的,打开CSDN博客首页,他不是有个最新文章么,这个里面都是最新发布的文章 ...
- 关于mybatis中typeHandler的两个案例
在做开发时,我们经常会遇到这样一些问题,比如我有一个Java中的Date数据类型,我想将之存到数据库的时候存成一个1970年至今的毫秒数,怎么实现?再比如我有一个User类,User类中有一个属性叫做 ...