python_可迭代对象与迭代器

本文详细解析了Python中的可迭代对象与迭代器的概念,包括它们的定义、使用方法及优缺点。通过实例展示了两者之间的转换及在内存管理、数据处理上的不同表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可迭代对象

  • 字面意思:对象?Python中一切皆对象,一个实实在在的值,对象。

  • 可迭代:更新迭代,重复的,循环的一个过程,更新迭代每次都有新的内容,可以进行循环更新的一个实实在在的值

  • 专业的角度:内部含有’iter’方法的对象,可迭代对象。
    例如:str list tuple dict set range 文件句柄

  • 获取对象的所有方法且以字符串的形式表现:dir()

  • 判断一个对象是否是可迭代对象:

s1 = 'fsjef'
print('__iter__'in dir(s1))

####
True

优点:

  • 1、存储的数据直接显示,比较直观
  • 2、拥有的方法比较多,操作方便
    缺点:
  • 1、占用内存
  • 2、不能直接通过for 循环,不能直接取值(索引,key)

迭代器

  • 字面意思:更新迭代 、器 :工具:可更细迭代的工具

  • 专业角度:内部含有’iter’方法并且含有’next’方法的对象就是迭代器

  • 可以判断是否是迭代器:'iter’and’next’在不在dir(对象)

  • 判断一个对象是否是迭代器


with open('文件1',encoding='utf-8',mode='w') as f1:
    print(('__iter__' in dir(f1)) and ('__next__' in dir(f1)))

True
  • 迭代器的取值
s1 = 'fsafef'
obj = iter(s1)
print(next(obj))   #每运行一次next取一次值,并且会记住上一次的取值
print(next(obj))

#####
f
s
  • 可迭代对象如何转化为迭代器
    iter([1,2,3])

  • while循环模拟for循环机制

l1 = [11,22,33,44,55,66,77,88]
#将可迭代对象转化成迭代器
obj = iter(l1)
while 1:
    try:
        print(next(obj))
    except StopIteration:
        break

###
11
22
33
44
55
66
77
88

Process finished with exit code 0

优点:

  • 1、节省内存
  • 2、惰性机制,next一次,取一次值。
    缺点:
  • 速度慢
  • 不走回头路
可迭代对象与迭代器的对比
  • 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少(几百万对象8G内存是可以承受的)的一个数据集
  • 当你侧重于对数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择
  • 迭代器是也非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集
  • 当你的数据量过大,达到足矣撑爆你的内存或者你以节约内存为首选因素时,将数据集设置为迭代器是一个不错的选择

对比

#可迭代对象
l1 = [11,22,33,44,55,66,77,88]
for i in range(3):
    print(l1[i])
for i in range(5):
    print(l1[i])
####打印结果
11
22
33
11
22
33
44
55

Process finished with exit code 0


#迭代器
l1 = [11,22,33,44,55,66,77,88]
obj = iter(l1)
for i in range(3):
    print(next(obj))
for i in range(5):
    print(next(obj))

###打印结果
11
22
33
44
55
66
77
88

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值