首页 » 编程 » Python » Python学习 » 正文

生成器总结

首先引出问题:

li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3] 写一个所有数值乘以2的生成器。(编程)

此题也并不难,要求不能用lambda,但我还是将lambda的方式写出来。当时咋就写不出来呢?

 

方式1:

# lambda方式
li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3]
new_li = list(map(lambda x: x * 2, li))
print(new_li)

输出结果:[2, 4, 6, 10, 10, 12, 14, 16, 18, 18, 16, 6]

 

方式2:

li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3]
g = (i * 2 for i in li)
new_li = []
for num in g:
    new_li.append(num)
print(new_li)

输出结果:[2, 4, 6, 10, 10, 12, 14, 16, 18, 18, 16, 6]

 

方式3:

li = [1, 2, 3, 5, 5, 6, 7, 8, 9, 9, 8, 3]


def test(li):
    for i in li:
        yield i * 2


g = test(li)
new_li = []
for num in g:
    new_li.append(num)
print(new_li)

输出结果:[2, 4, 6, 10, 10, 12, 14, 16, 18, 18, 16, 6]

 

总结:

生成器:就是存储的一种算法,它并不直接给你返回你要得数据,而是你需要的时候就去向他要,他就按照算法给你。

比如例子3里的yield i*2, 当第一次调用next的时候他就停在这儿了,第2次调用next的时候他在从上一次停留的地方开始计算返回给你数据。

 

更多关于生成器,请看笔记:https://www.cnblogs.com/alexchenx/p/9100615.html

 

 

 

赞 (0)

发表评论

*