Python笔记-列表生成式、生成器generator(包括斐波拉契数列)、迭代器Iterator
2017-04-03 11:25
776 查看
列表生成式
1、range()函数,可以生成一个整数序列range(0,10) >>>0,1,2,3,4,5,6,7,8,9
2、生成[1,2,3,4,5,6,7,8,9,10]可以用list(range(1, 11))。但是生成[1x1,2x2,3x3,…,10x10]怎么做?
一、循环
二、
[x * x for x in range(1, 11)]
把要生成的元素x * x放到前面
后面跟for循环,就可以把list创建出来
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]
还可以使用两层循环,可以生成全排列:
>>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器generator:
列表元素可以按照某种算法推算出来,可以在循环的过程中不断推算出后续的元素。这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。1、只要把一个列表生成式的[]改成(),就创建了一个generator:
>>> L = [x * x for x in range(10)] >>> L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> g = (x * x for x in range(10)) >>> g <generator object <genexpr> at 0x1022ef630>
用for循环打印出generator的每一个元素
g = (x * x for x in range(10)) for n in g: print(n)
著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, …
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:
def fib(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a + b #a, b = b, a + b相当于a=b,b=a+b n = n + 1 return 'done'
2、把print(b)改为yield b就可以把函数fib()变成generator。
3、generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
4、一个带有 yield 的函数就是一个 generator,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。
迭代器Iterator:
1、可以被next()函数调用并不断返回下一个值的对象称为迭代器。2、因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
3、凡是可作用于for循环的对象都是Iterable类型;
4、凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
5、集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
相关文章推荐
- Python高级特性(切片 迭代 列表生成式 生成器 迭代器)学习笔记
- Python学习笔记(10)-生成器generator和迭代器Iterator
- python的迭代器iterator和生成器generator(关键字yield)的简单理解
- Python--列表生成式(List Comprehensions)、del语句和生成器(generator)
- python3 列表生成式、生成器、迭代器
- Python学习笔记(六)Python的列表生成式、生成器
- python学习笔记,列表生成式,生成器
- python3 列表生成式,字典生成式,generator列表生成器的应用
- 初学Python——列表生成式、生成器和迭代器
- python iterator(迭代器) and generator(生成器)
- 2016.4.10Python列表生成式及生成器generator
- Python笔记3——切片,迭代,列表生成式,生成器
- 【Python】[高级特性]切片,迭代,列表生成式,生成器,迭代器
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
- python学习 生成器 列表生成式 迭代器
- python2.7学习笔记(6) ——高级特性:切片、迭代、列表生成式、生成器
- Python day5:列表生成式,生成器,迭代器
- Python高级特性(切片,迭代,列表生成式、生成器、迭代器)
- Python笔记3——切片,迭代,列表生成式,生成器