Python3中的列表生成式、生成器与迭代器实例详解
本文实例讲述了Python3中的列表生成式、生成器与迭代器。分享给大家供大家参考,具体如下:
列表生成式
Python内置的一种极其强大的生成列表list的表达式。返回结果必须是列表。
基本语法:
[变量表达式for变量in表达式]
示例
a=[x**2forxinrange(1,10)] b=[x*xforxinrange(1,11)ifx%2==0] c=[m+nformin'ABC'fornin'123'] d={'Java':"99",'C':"99",'C++':"99"} L=[k+'='+vfork,vind.items()] print(a) print(b) print(c) print(L)
通过列表生成式,可以直接创建一个列表,但是,受到内存的限制,列表容量是有限的,当列表元素很大的时候,会很浪费内存空间。所以可以通过生成器Generator生成。
生成器Generator
Generator是一种一边循环一边计算的机制。
应用场景:只需要获得list中的前几个元素,节省存储空间。
使用()创建列表生成器
把列表生成式的中括号[]修改为圆括号即可()
a=(x**2forxinrange(1,10)) b=(x*xforxinrange(1,11)ifx%2==0) c=(m+nformin'ABC'fornin'123') d={'Java':"99",'C':"99",'C++':"99"} L=(k+'='+vfork,vind.items()) print(a) print(b) print(c) print(L)
打印结果如下
at0x1052ec2b0>
at0x1052ec468>
at0x1052ec4c0>
at0x1052ec518>
使用next调用元素:
print(a.__next__()) print(a.__next__()) print(a.__next__()) print(a.__next__())
next方法会一个个的返回元素值,调用一次,返回一次下一个位置的元素。
该方法在没有元素可以调用的时候,会返回StopIteration的错误
使用循环调用元素
foriina: print(i)
该方法的好处,是不会返回StopIteration的错误
yield关键字创建Generator
如果一个函数包含了yield关键字,那么该函数就不再是普通的函数,而是一个生成器Generatior。
将print(sum)修改为yield(sum),即将原来的函数,修改为了生成器。
deffib(n): sum=0 i=0 while(i包含yield语句的函数会被特定的编译成生成器。可以吧生成器理解为迭代器。
在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行。
Generator的工作原理,是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。
对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。
python生成器可参考https://www.nhooo.com/article/63929.htm
以下实例使用yield实现斐波那契数列
#!/usr/bin/python3 importsys deffibonacci(n):#生成器函数-斐波那契 a,b,counter=0,1,0 whileTrue: if(counter>n): return yielda a,b=b,a+b counter+=1 f=fibonacci(10)#f是一个迭代器,由生成器返回生成 whileTrue: try: print(next(f),end="") exceptStopIteration: sys.exit()迭代器iterator
- 迭代器是访问集合元素的一种方式
- 迭代器有两个方法,生成迭代器iter(),返回迭代器的下一个项目next()
- 迭代器对象从集合的第一个元素开始访问,知道所有元素被访问结束。迭代器只能往前,不能回退。
- 字符串、列表、元组都可以用于创建迭代器
迭代器iterator和可迭代对象iterable的区别在于:
可以直接作用于for循环的对象统称为可迭代对象:Iterable,list、tuple、dict、set、str、Generator等等。
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
使用iter创建迭代器
list、dict、str等数据类型不是Iterator,但是可以通过iter()来创建迭代器 list=[1,2,3,4] it=iter(list)#创建迭代器对象 print(next(it))#输出迭代器的下一个元素 1 print(next(it)) 2Python迭代器Iterator可参考:https://www.nhooo.com/article/128183.htm
附:廖学峰Python相关资料下载:
廖雪峰Python2.7教程PDF版:https://www.nhooo.com/books/536707.html
廖雪峰python3教程(带标签完整版):https://www.nhooo.com/books/536708.html
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。