python: 迭代器 (Iterator)

概述

迭代器(iterator)是访问集合内元素的一种方式,提供了一种遍历类序列对象的方法。从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。对于字典、文件、自定义对象类型等,可以自定义迭代方式,从而实现对这些对象的遍历。总之,迭代器就是定义了对对象进行遍历的方式。

凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

实验代码

python提供了一个iter函数用来生成迭代器。这个方法有两个参数,当只有一个参数的时候,若这个参数是一个容器,则返回这个容器的迭代器对象,若这个参数本身就是一个迭代器,则返回其自身。

lst = [10, 20, 30, 40]
it = iter(lst)
print it
it2 = iter(it)
assert id(it) == id(it2)

for 与 迭代器 的比较:

名称计数方法异常情况优点缺点联系
for通过索引保留了索引不适合遍历特别巨大的集合 或 无法随机访问的数据结构(比如set)for循环本质上就是通过不断调用next()函数实现的
迭代器每次迭代指针会指向下一个元素的位置StopIteration惰性求值,适合遍历特别巨大的集合 或 无法随机访问的数据结构(比如set)丢失了索引(但可用enumerate()解决),且不能回退


lst = [10, 20, 30, 40]
for x in lst:
    pass

等价于:

it = iter([10, 20, 30, 40])
while True:
    try:
        x = next(it) # 或者 x = it.next()
    except StopIteration:
        break


迭代器enumerate() 相结合:

for idx, ele in enumerate(lst):
    print idx, ele


Ref:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值