我们在前面使用过语句“for x in列表对象”,这就表示列表对象是可迭代的(Iterable)。那么如何判断某个对象是否可迭代呢?答案是可以使用collections.Iterable类来判断。

如下面的代码所示,列表是可迭代的,整数是不可迭代的,字符串是可迭代的。

>>> from collections import Iterable # 引入Iterable类

>>> isinstance([], Iterable) # 列表是可迭代的

True

>>> isinstance(12, Iterable) # 整数是不可迭代的

False

>>> isinstance("12", Iterable) # 字符串是可迭代的

True

另外一个概念是迭代器(Iterator)。它可以作为内置函数 next() 的参数,每次按照一定顺序得到其中一个元素。但比较有趣的是,列表不是迭代器。同样可以用 collections.Iterator 类来判断某个对象是否是迭代器。

如下面的代码所示,列表和字符串都不是迭代器:

>>> from collections import Iterator # 引入Iterator类

>>> isinstance([], Iterator) # 列表不是迭代器

False

>>> isinstance("abc", Iterator) # 字符串也不是迭代器

False

那么列表是否可以作为 next() 的参数呢?答案是不可以。例如下面的代码:

>>> a = [1, 2, 3] # 创建列表对象a

>>> next(a) # 使用内置的next()接口函数,发生错误

Traceback (most recent call last):

File "", line 1, in

TypeError: list object is not an iterator

这比较容易理解,因为我们没有指定当前位置,但可以使用另外一个内置函数 iter() 来将其转换成 Iterator。下面的代码演示了这种用法:

>>> from collections import Iterable # 引入Iterable和Iterator类

>>> from collections import Iterator

>>> a = [1, 2, 3] # 创建列表对象a

>>> isinstance(a, Iterable) # 列表对象是可迭代的

True

>>> isinstance(a, Iterator) # 列表对象不是迭代器

False

>>> it_a = iter(a) # 从列表对象得到迭代器it_a

>>> isinstance(it_a, Iterable) # it_a是可迭代的,也是迭代器

True

>>> isinstance(it_a, Iterator)

True

>>> type(it_a) # it_a是列表型迭代器

>>> next(it_a) # 得到一个数据

1

>>> it_a.next() # 使用另外一种方式得到一个数据

2

>>> next(it_a)

3

>>> next(it_a) # 没有数据了,抛出异常

Traceback (most recent call last):

File "", line 1, in

StopIteration

迭代器的一个特点是它只能使用一次,从头部走到尾部。如果希望再次走一遍,只能创建一个新的迭代器。

python迭代器使用_Python迭代器的用法相关推荐

  1. python迭代器好处_python迭代器

    知识内容: 1.可迭代对象和迭代器 2.判断迭代器和可迭代对象的方法 3.迭代器的优缺点 一.可迭代对象和迭代器 1.可迭代对象 -> Iterable (1)可迭代协议 可以被迭代要满足要求的 ...

  2. python迭代器使用_python迭代器的使用方法实例

    什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.pytho ...

  3. python 迭代器 生成器_python 迭代器与生成器

    迭代器 迭代器就是iter(可迭代对象函数)返回的对象,说人话.......可迭代对象由一个个迭代器组成 可以用next()函数获取可迭代对象的数据 迭代是访问集合元素的一种方式(因为集合是无序的,所 ...

  4. python 迭代器 生成器_Python迭代器和生成器

    迭代器认知 迭代器 (iterator): 如果一个对象同时有__iter__()和__next__()魔术方法的话,这个对象就可以称为是迭代器. __iter__()的作用是可以让for循环遍历.而 ...

  5. python iterable对象_Python迭代器Iterable判断方法解析

    迭代器(Iterable):能直接作用于for循环的对象,统称可迭代对象.例如:list.tuple.set.str.generator都是可迭代对象. 1.如何判断一个对象是否可迭代: # 如何判断 ...

  6. python six 用途_python之six用法

    six.PY2 返回一个表示当前运行环境是否为python2的boolean值 six.PY3 返回一个表示当前运行环境是否为python3的boolean值 importsix,sysprint(s ...

  7. python星号正方形_Python星号*与**用法分析

    本文实例分析了Python星号*与**用法.分享给大家供大家参考,具体如下: 1. 加了星号(*)的变量名会存放所有未命名的变量参数,不能存放dict,否则报错. 如: def multiple(ar ...

  8. python管道界面_python中管道用法入门实例

    本文实例讲述了python中管道用法.分享给大家供大家参考.具体如下: #!coding=utf-8 import multiprocessing def consumer(pipe): output ...

  9. python pillow库_python pillow模块用法

    pillow Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持pytho ...

最新文章

  1. TypeScript 1
  2. beanUtils操作bean的属性
  3. 解决无法连接到远程SqlServer 2005 Express服务器的问题
  4. linux进程的环境变量,LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge...
  5. ubuntu16.04版本 the system is running in low-graphics mode
  6. 机器学习(监督学习) 项目流程模板
  7. 要想下班早,微服务架构少不了
  8. cmake字符串转数组_JS 数组中你或许不知道的操作
  9. 2017.10.28 压缩 思考记录
  10. 惊呆!骑士一天收入过万?顺丰同城回应:用户打赏约7856元
  11. vector所存储对象地址在vector操作过程中发生变化
  12. linux rm 文件找回_Linux 中删除目录的多种方法
  13. php fseek函数,php fseek函数怎么用 - fseek
  14. 数学原理-高等数学复习笔记 ——1.2 泰勒公式 罗尔中值定理与拉格朗日中值定理(附加多个实战题目)
  15. Git基本命令的使用
  16. 注意:近期QQ陌生人经常发送QQ文件名为“果冻.r22”等文件!大家千万别接收或打开!
  17. 如何通过看电影学英语来源
  18. 17岁高中生证明著名数学难题,因此被MIT录取
  19. 用httpUrlConnection实现文件上传
  20. 【最经典的79个】软件测试面试题(内含答案)提前备战“金九银十”

热门文章

  1. 光纤收发器长距离的传输过程出现死机的解决方案
  2. 【渝粤教育】国家开放大学2019年春季 2773特种动物养殖 参考试题
  3. 【渝粤教育】国家开放大学2018年春季 8634-21TAndroid智能手机编程 参考试题
  4. 【渝粤教育】 国家开放大学2020年春季 1260软件工程 参考试题
  5. 【渝粤题库】陕西师范大学500006 算法语言 作业
  6. 【渝粤题库】国家开放大学2021春1373特殊教育概论题目
  7. linux hexdump显示格式c数组,hexdump命令
  8. 注入dll到explorer.exe中无反应_MBR膜生物反应器的安装及技术要求都有什么呢?
  9. c/c++ 模板与STL小例子系列一 自建Array数组
  10. luogu P1519 穿越栅栏 Overfencing