迭代器和生成器

可迭代对象

列表、元组、集合、字典、字符串等对象被称为可迭代对象

迭代器:

x=[1,2,3]
i=iter(x)
print(next(i))
print(next(i))
print(next(i))#next 每次只迭代出一个数,从前往后循序迭代,有几个数可以迭代几次,超过会提示没有可迭代对象

生成器:
使用yield :

复杂生成器:

def gen(n):
    for i in range(n):
        yield i*i
x=gen(5)
for i in x:
    print(i)

输出结果:
0
1
4
9
16

简化生成器:

a=(i*i for i in range(5))
for i in a:
    print(i)

输出结果一样

生成器有什么作用:节省储存空间和时间,第一步直接生成函数,不需要计算,

import sys
import time
t1=time.time()
mylist = [i for i in range(10000000)]
t2=time.time()
print("占用时间:",t2-t1)
print("占用空间:",sys.getsizeof(mylist))
t3=time.time()
mygen = (i for i in range(10000000))
t4=time.time()
print("占用时间:",t4-t3)
print("占用空间:",sys.getsizeof(mygen))

输出结果:
占用时间: 0.5699965953826904
占用空间: 89095160
占用时间: 0.0
占用空间: 104

练习:
构造一个计算绝对值的生成器。

b=[1,2,3,-4,-5,-3]
a=(abs(x) for x in b  )#此时的a是个全是正数的列表
for i in a:
    print(i)

输出结果:
1
2
3
4
5
3

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值