python生成器学习
2016-11-25 17:07
309 查看
## python生成器学习 ## 根据廖大的python教程[廖雪峰python教程](http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000),我们使用python的列表生成式,可以直接生成列表: `L=[x for x in range(10)]` 但是这种方式比较耗内存,当我们要生成很大数量的数据时,要占很大部分的内存。有时我们要做的仅仅是按需求取出一个数列的前n个数字,这样的话就可以使用python中的生成器来实现需要的功能。 例: `g = (x for x in range(10))` **注意**:创建列表生成式,需要把生成列表的**[]**变成**()**即可。当我们要取出生成器中的数据时,可以通过next()来得到下一个值: ![生成器获取数值举例](https://img-blog.csdn.net/20161125164835602) 当我们使用生成器取出最后一个值,没有多余的值可取的时候,会抛出StopIteration错误。 在廖大的教程中,生成器部分出了一道斐波那契数列[这里写链接内容](https://zh.wikipedia.org/zh-cn/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97)的题目,要求使用生成器打印出斐波那契数列,先将解题思路记录下来: 廖大期望的输出如下: ![期待的输出](https://img-blog.csdn.net/20161125165735012) 首先让我们看看规律: 1 1 1 1 2 1 1 3 3 1 **rule1:** 对于每一列col = 0,都有L[:,0] = 1 **rule2:** 对于每一行和每一列相等row = col = n,都有L = 1 **rule3:** 对于上述两条规则作用之外的部分,又L[i][j] = L[i-1][j-1]+L[i-1][j] 根据上述三个规则,我们编写如下代码: ``` def fib(): L = [1] while True: yield L L.append(0) L = [L[i-1]+L[i] for i in range(len(L))] ``` 现在我们模拟程序运行的过程: 第一次: 打印 L,因为L之前赋值为L=[1],所以结果为:[1] 第二次: 此时,代码执行L.append(0),那么L应为[1,0],此时len(L)值为2,那么range(2)应[0,1],当i的取值为0时,L = [L[-1]+L[0]],注意,此时L[0]为1,L[-1]为列表[0,1]的最后一个元素,就是1喽。当i=1的情况可以按此推到。所以,循环第二次,列表L的值为**[1,1]** 第三次: 此时,代码执行L.append(0),那么L应为[1,1,0],此时len(L)值为3,那么range(3)就应该时[0,1,2],当i=0时,L=[L[-1]+L[0]]=[1],当i=1时,L=[1,2],当i=3时,L=[1,2,1]。 之后的情况,可以按第三次循环的描述继续推导。 python的代码如下:
def fib(): L = [1] while True: yield L L.append(0) L = [L[i-1]+L[i] for i in range(len(L))] n = 0 for t in fib(): print(t) n = n+1 if n == 5: break
运行结果如下: ![斐波那契运行结果](https://img-blog.csdn.net/20161125213019067)
相关文章推荐
- python 从yield 学习迭代器和生成器
- python yield生成器 分类: python基础学习 2013-08-04 15:40 324人阅读 评论(0) 收藏
- python学习之---生成器
- Python学习笔记 - 生成器generator
- Python学习笔记 - 生成器generator
- Python学习 随机数据生成器
- python2.7学习笔记(6) ——高级特性:切片、迭代、列表生成式、生成器
- Python3 学习第六弹: 迭代器与生成器
- Python学习-39.Python中的生成器
- Python学习之生成器
- python中的生成器(generator) 分类: python Module python基础学习 2013-10-28 17:41 310人阅读 评论(0) 收藏
- Python学习4:生成器、lamda表达式及map、reduce、filter函数
- 生成器的应用例子 分类: python 小练习 divide into python python基础学习 2013-12-31 21:32 236人阅读 评论(0) 收藏
- Python学习笔记——生成器,yeild语句
- Python 生成器学习
- python 学习笔记(6)闭合与生成器
- 生成器介绍 分类: python 小练习 python基础学习 divide into python 2013-12-31 21:17 226人阅读 评论(0) 收藏
- Python学习4:生成器、lamda表达式及map、reduce、filter函数
- Python学习 Day 4 函数 切片 迭代 列表生成式 生成器
- python学习笔记--理解生成器