标签:文档 list obj pytho tab 获取 tps python for
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
l = [ i*2 for i in range(10)] print(l) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 列表生成式 G = (i*2 for i in range(10)) print(G) #生成器
创建L
和g
的区别仅在于最外层的[]
和()
,L
是一个list,而g
是一个generator。
可以用for对generator遍历。
for j in G: print(j) 0 2 4 6 8 10 12 14 16 18
对于列表,我们可以在长度内任意取值,而生成器只有在循环到这一次了才有值。
l = [ i*2 for i in range(10)] G = (i*2 for i in range(10)) print(l[4]) #8 print(G[4]) #TypeError: ‘generator‘ object is not subscriptable
generator中有一个next()方法可以直接使用。第一次使用返回第一个值,第二次使用返回第二个值,以此类推。这个是获取下一个值,generator中没有获取上一个值的方法。
G = (i*2 for i in range(10)) print(G.__next__()) #0 print(G.__next__()) #2 print(next(G)) #4 print(next(G)) #6
参考文档: 生成器---廖老师博客
标签:文档 list obj pytho tab 获取 tps python for
原文地址:http://www.cnblogs.com/qing-chen/p/7267113.html