前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python: 迭代器 (Iterator)

python: 迭代器 (Iterator)

作者头像
JNingWei
发布2018-09-27 17:03:24
6940
发布2018-09-27 17:03:24
举报
文章被收录于专栏:JNing的专栏JNing的专栏

概述

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

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

实验代码

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

代码语言:javascript
复制
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()解决),且不能回退

代码语言:javascript
复制
lst = [10, 20, 30, 40]
for x in lst:
    pass

等价于:

代码语言:javascript
复制
it = iter([10, 20, 30, 40])
while True:
    try:
        x = next(it) # 或者 x = it.next()
    except StopIteration:
        break

迭代器enumerate() 相结合:

代码语言:javascript
复制
for idx, ele in enumerate(lst):
    print idx, ele


Ref:



本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年11月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 实验代码
    • Ref:
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档