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 条评论
登录 后参与评论

相关文章

来自专栏owent

C++ 新特性学习(四) — Bind和Function

木有错,这是C++,并且很方便地实现了委托 这就是传说中的绑定库和增强型的函数对象 接下来一个一个来

15710
来自专栏开发与安全

从零开始学C++之对象的使用(二):四种对象生存期和作用域、static 用法总结

一、四种对象生存期和作用域 ? 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局...

20900
来自专栏程序员互动联盟

【专业技术】深入理解Java字符串函数substring

在Java中开发,String是我们开发程序可以说必须要使用的类型,String有一个substring方法用来截取字符串,我们想必也常常使用。但是你真正的了解...

38260
来自专栏WD学习记录

js学习2016-8-16

    当一个函数被保存为对象的一个属性时,我们称它为一个方法。如果调用表达式包含一个提取属性的动作,(即我们讲解对象时所说的.操作符),那么它就被当做一个方法...

8810
来自专栏python3

python-其它有用模块1

re模块是文件处理中必不可少的模块,它主要应用于字符串的查找,定位等等,在使用网络爬虫时,即使没有爬虫框架,re模块配合urllib.request模块也可以完...

9320
来自专栏java一日一条

java语言核心----面向对象之this关键字

8820
来自专栏cs

python字符串

慕课网 首发了,放在垂直领域吧。 python字符串是一种元素为字符的序列类型。因为序列类型是元素被顺序放置的一种数据结构,因此可以通过索引来获取某一个字符,...

34090
来自专栏技术博文

2.js中对于函数参数不确定的解决--arguments

1.arguments对象 在函数代码中,使用特殊对象 arguments,无需明确指出参数名,就能访问它们。 例如,在函数 sayHello() 中,第一个参...

29140
来自专栏领域驱动设计DDD实战进阶

07-TypeScript的For循环

在传统的JavaScript中,关于循环,可以有两种方式,一种是forEach,一种是for。 forEach的用法如下: var sarr=[1,2,3,4]...

36840
来自专栏程序员同行者

python3 内置函数详解

23330

扫码关注云+社区

领取腾讯云代金券