python生成器与迭代器详解生成器与迭代器详解
列表生成式列表生成式:
例一:
a = [i+1 for i in range(10)] print(a)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
例二:
L = [1, 2, 3, 4, 5] print([i*i for i in L if i>3])
输出:
[16, 25]
例三:
L = [1, 2, 3, 4, 5] I = [6, 7, 8, 9, 10] print([i*a for i in L for a in I if i > 2 if a < 8])
输出:
[18, 21, 24, 28, 30, 35]
生成器:生成器:
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个
元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费
了。
所以,如果列表元素可以按照某种算法推算出来,这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边
循环一边计算的机制,称为生成器:generator。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
示例:
L = [1, 2, 3, 4, 5] I = [6, 7, 8, 9, 10] g = (i*a for i in L for a in I )
print(g)
输出:
<generator object <genexpr> at 0x00000276586C1F48>
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
我们可以直接打印出list的每一个元素,可以通过generator的next()方法
next(g)
例一:
L = [1, 2, 3, 4, 5] I = [6, 7, 8, 9, 10] g = (i*a for i in L for a in I )
print(next(g))
print(next(g))
print(next(g))
输出:
6
7
8
例二:
L = [1, 2, 3, 4, 5] I = [6, 7, 8, 9, 10] g = (i*a for i in L for a in I if i > 2 if a < 8)
print(next(g))
print(next(g))