python生成器





当我们创建一个包含大量元素的列表,但只需要其中部分元素时,会浪费大量的存储空间。若这些元素可以通过一些算法推算出来,那么我们就可以用生成器来替代。

 

把列表的[]改成(),就可以创建一个生成器:

 

>>> 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 0×1022ef630>

 

 

因为生成器保存的是算法,所以无法直接打印出所有元素,而是通过next.(g),或者使用for循环来计算出每个元素。

 

>>> next(g)

0

>>> next(g)

1

>>> g = (x * x for x in range(10))

>>> for n in g:

…     print(n)

0

1

4

9

16

25

36

49

64

81

 

 

当算法太过复杂,无法利用for来实现时,我们可以通过函数来实现。

 

例如杨辉三角,就可以用函数简单的写出来。

 

 

def test():

    L = [1]

    while True:

        L.append(0)

        L = [L[i - 1] + L[i] for i in range(len(L))]

n = 0

for t in test():

    print(t)

    n = n + 1

    if n == 10:

        break

[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]

 

 

杨辉三角的特性是每个数等于它上方两个数之和,所以在L都后面新增一个0以后,我们就可以用L = [L[i - 1] + L[i] for i in range(len(L))]这个公式推算出每一个值了。




Related posts

coded by nessus
分享:  DeliciousGReader鲜果豆瓣CSDN网摘
Trackback

no comment untill now

Add your comment now

无觅相关文章插件