python迭代器使用_Python迭代器的用法
我们在前面使用过语句“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迭代器的用法相关推荐
- python迭代器好处_python迭代器
知识内容: 1.可迭代对象和迭代器 2.判断迭代器和可迭代对象的方法 3.迭代器的优缺点 一.可迭代对象和迭代器 1.可迭代对象 -> Iterable (1)可迭代协议 可以被迭代要满足要求的 ...
- python迭代器使用_python迭代器的使用方法实例
什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.pytho ...
- python 迭代器 生成器_python 迭代器与生成器
迭代器 迭代器就是iter(可迭代对象函数)返回的对象,说人话.......可迭代对象由一个个迭代器组成 可以用next()函数获取可迭代对象的数据 迭代是访问集合元素的一种方式(因为集合是无序的,所 ...
- python 迭代器 生成器_Python迭代器和生成器
迭代器认知 迭代器 (iterator): 如果一个对象同时有__iter__()和__next__()魔术方法的话,这个对象就可以称为是迭代器. __iter__()的作用是可以让for循环遍历.而 ...
- python iterable对象_Python迭代器Iterable判断方法解析
迭代器(Iterable):能直接作用于for循环的对象,统称可迭代对象.例如:list.tuple.set.str.generator都是可迭代对象. 1.如何判断一个对象是否可迭代: # 如何判断 ...
- python six 用途_python之six用法
six.PY2 返回一个表示当前运行环境是否为python2的boolean值 six.PY3 返回一个表示当前运行环境是否为python3的boolean值 importsix,sysprint(s ...
- python星号正方形_Python星号*与**用法分析
本文实例分析了Python星号*与**用法.分享给大家供大家参考,具体如下: 1. 加了星号(*)的变量名会存放所有未命名的变量参数,不能存放dict,否则报错. 如: def multiple(ar ...
- python管道界面_python中管道用法入门实例
本文实例讲述了python中管道用法.分享给大家供大家参考.具体如下: #!coding=utf-8 import multiprocessing def consumer(pipe): output ...
- python pillow库_python pillow模块用法
pillow Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持pytho ...
最新文章
- TypeScript 1
- beanUtils操作bean的属性
- 解决无法连接到远程SqlServer 2005 Express服务器的问题
- linux进程的环境变量,LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge...
- ubuntu16.04版本 the system is running in low-graphics mode
- 机器学习(监督学习) 项目流程模板
- 要想下班早,微服务架构少不了
- cmake字符串转数组_JS 数组中你或许不知道的操作
- 2017.10.28 压缩 思考记录
- 惊呆!骑士一天收入过万?顺丰同城回应:用户打赏约7856元
- vector所存储对象地址在vector操作过程中发生变化
- linux rm 文件找回_Linux 中删除目录的多种方法
- php fseek函数,php fseek函数怎么用 - fseek
- 数学原理-高等数学复习笔记 ——1.2 泰勒公式 罗尔中值定理与拉格朗日中值定理(附加多个实战题目)
- Git基本命令的使用
- 注意:近期QQ陌生人经常发送QQ文件名为“果冻.r22”等文件!大家千万别接收或打开!
- 如何通过看电影学英语来源
- 17岁高中生证明著名数学难题,因此被MIT录取
- 用httpUrlConnection实现文件上传
- 【最经典的79个】软件测试面试题(内含答案)提前备战“金九银十”
热门文章
- 光纤收发器长距离的传输过程出现死机的解决方案
- 【渝粤教育】国家开放大学2019年春季 2773特种动物养殖 参考试题
- 【渝粤教育】国家开放大学2018年春季 8634-21TAndroid智能手机编程 参考试题
- 【渝粤教育】 国家开放大学2020年春季 1260软件工程 参考试题
- 【渝粤题库】陕西师范大学500006 算法语言 作业
- 【渝粤题库】国家开放大学2021春1373特殊教育概论题目
- linux hexdump显示格式c数组,hexdump命令
- 注入dll到explorer.exe中无反应_MBR膜生物反应器的安装及技术要求都有什么呢?
- c/c++ 模板与STL小例子系列一 自建Array数组
- luogu P1519 穿越栅栏 Overfencing