生成器与迭代器
Posted just-for-myself
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器与迭代器相关的知识,希望对你有一定的参考价值。
迭代器:具有一个next()函数
凡是可作用于for
循环的对象都是Iterable
类型;
凡是可作用于next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列;
集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。
a = [1,2,3,4,,5] for x in a: print x
生成器:也是一个可迭代对象
yield每次产生一个值(使用yield),函数就会被冻结,即函数停在那点等待被重新唤醒
def fib2(num):
a,b,c = 0,0,1
while a < num:
#print c
yield c #含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator
b,c = c, b+c
a=a+1
迭代器实现杨辉三角
预期效果:
[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]
def triangles(): n = [1] while True: yield n #生成器函数的标志 n = [x+y for x,y in zip([0] + n,n+[0])]#生成一个列表,内包含[1],[1,1]....等 n = 0 for t in triangles():#迭代输出 print(t) n = n + 1 if n == 10: break
zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。
以上是关于生成器与迭代器的主要内容,如果未能解决你的问题,请参考以下文章