Python中的可迭代Iterable和迭代器Iterator
目录
Iterable可迭代对象
如果给定一个 list列表 或 tuple元组 ,我们可以通过 for 循环来遍历这个 list 或 tuple ,这种遍历我们称为迭代(Iteration),可以直接作用于 for 循环的对象统称为 可迭代对象。当我们使用 for 循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是 list 还是其他数据类型。
a=[1,2,3,4,5]
b=(6,7,8,9,10)
for i in a:
print(i)
for i in b:
print(i)
如何判断对象是否是可迭代对象Iterable
那么,如何判断一个对象是可迭代对象呢?可以通过 collections 模块的 Iterable 类的 isinstance()方法判断:
from collections import Iterable
>>isinstance(123,Iterable) #判断整数是否是可迭代对象
False
>>isinstance('abc',Iterable) #判断字符串是否是可迭代对象
True
>>isinstance([1,2,3],Iterable) #判断列表是否是可迭代对象
True
>>isinstance((1,2,3),Iterable) #判断元组是否是可迭代对象
True
>>isinstance({'name':'xie','age':10},Iterable) #判断字典是否是可迭代对象
True
Iterator迭代器
凡是可作用于for循环的对象都是 Iterable(可迭代) 类型;
凡是可作用于next()函数的对象都是 Iterator(迭代器) 类型,它们表示一个惰性计算的序列;
Iterator迭代器一定是Iterable可迭代的,但是Iterable可迭代对象不一定是Iterator迭代器
常见类型如str、list、tuple、dict等是 Iterable 但不是 Iterator
如何判断对象是否迭代器Iterator
那么,如何判断一个对象是可迭代对象呢?可以通过 collections 模块的 Iterator 类的isinstance()方法判断:
from collections import Iterator
>>isinstance('abc',Iterator) #判断字符串是否是迭代器
False
>>isinstance([1,2,3],Iterator) #判断列表是否是迭代器
False
>>isinstance((1,2,3),Iterator) #判断元组是否是迭代器
False
>>isinstance({'name':'xie','age':10},Iterator) #判断字典是否是迭代器
False
你可能会问,为什么list、dict、tuple、str等数据类型不是Iterator?
这是因为Python的 Iterator 对象表示的是一个数据流,Iterator 对象可以被 next() 函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration 错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以 Iterator 的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator 甚至可以表示一个无限大的数据流,例如全体自然数。而使用list、dict、tuple和str是永远不可能存储全体自然数的
将Iterable转换成Iterator
可以利用 iter( ) 函数将 Iterable 转换成 Iterator 对象
iter(Iterable)--->Iterator
from collections import Iterator
>>isinstance(iter('abc'),Iterator) #判断字符串是否是迭代器
True
>>isinstance(iter([1,2,3]),Iterator) #判断列表是否是迭代器
True
>>isinstance(iter((1,2,3)),Iterator) #判断元组是否是迭代器
True
>>isinstance(iter({'name':'xie','age':10}),Iterator) #判断字典是否是迭代器
True
Python中的可迭代Iterable和迭代器Iterator的更多相关文章
- Python中的可迭代对象,迭代器与生成器
先来看一张概览图,关于容器(container).可迭代对象(Iterable).迭代器(iterator).生成器(generator). 一.容器(container) 容器就是一个用来存储多个元 ...
- Python中的可迭代对象与迭代器对象
刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...
- Python:容器、迭代对象、迭代器、生成器及yield关键字
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list, ...
- Python中的可迭代对象
Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象: from collections import Iterable isinstanc ...
- Python中的可迭代对象/迭代器/For循环工作机制/生成器
本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...
- 【转】Python中自定义可迭代对象
python 中内置的可迭代的对象有 list.tuple.set.dict 等,那么我们自己怎么定义一个可迭代的对象呢?先来段代码吧 import re import reprlib RE_WORD ...
- Python 中的重点来了 : 迭代器 生成器
可迭代的对象:带有__iter__方法的,就是迭代器.字符串,列表,元祖,字典,集合,文件,都是可迭代的 可迭代的对象使用了__iter__方法的,就是迭代器,带有__next__,__iter__方 ...
- python函数之可迭代对象、迭代器的判断
怎么判断一个对象是可迭代对象还是迭代器 例子 from collections import Iterable, Iterator lst = ['Today is Wednesday', 'Tomo ...
- python基础一 ------可迭代对象和迭代器对象
可迭代对象和迭代器对象:前者生成后者 比喻:10个硬币都可以一一数(迭代),放入到存钱罐(可以取钱的那种),那这个存钱罐就是一个迭代器对象 需求:从网络抓取各个城市气温信息,并依次显示若依次抓取较多的 ...
随机推荐
- golang操作mysql2
目录 Go操作MySQL 连接 下载依赖 使用MySQL驱动 初始化连接 SetMaxOpenConns SetMaxIdleConns CRUD 建库建表 查询 单行查询 多行查询 插入数据 更新数 ...
- STM32 ADC详细篇(基于HAL库)
一.基础认识 ADC就是模数转换,即将模拟量转换为数字量 l 分辨率,读出的数据的长度,如8位就是最大值为255的意思,即范围[0,255],12位就是最大值为4096,即范围[0,4096] l ...
- C#使用OpenCV剪切图像中的圆形和矩形
前言 本文主要介绍如何使用OpenCV剪切图像中的圆形和矩形. 准备工作 首先创建一个Wpf项目--WpfOpenCV,这里版本使用Framework4.7.2. 然后使用Nuget搜索[Emgu.C ...
- TiDB在更新版本的时候初始化Prometheus的配置文件失败
一.背景是更换版本了之后,按照正常扩容节点也会报错. 我们安装的TiDB版本是v4.0.0,因为环境还在试用阶段,所以会经常增删节点.原因是我们违背官方说明,强行用机械盘上了,跑不过单机的mysql, ...
- jQuery学习笔记(2) jQuery选择器
jQuery的选择器完全继承了CSS的风格,利用jQuery选择器,可以非常便捷和快速地找出特定的DOM元素,然后为它们添加相应的行为. 目录 目录 CSS选择器 jQuery选择器 jQuery选 ...
- Django1和2的区别
一.路由的区别 1.Django1中的url from django.conf.urls import url # 使用url关键字 urlpatterns = [ url('article-(\d+ ...
- c语言链表从本地文件中读取和写入数据
1 typedef struct Data{ 2 40 char *name; 3 41 char *IDCARD; 4 42 char *job_id; 5 43 char *length; 6 4 ...
- java中ReentrantLock核心源码详解
ReentrantLock简介 ReentrantLock是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与synchronized关键字相比,它更灵活. ...
- Java 读取Word文本/段落格式属性
本文介绍通过Java后端程序代码来读取Word文本和段落格式的方法. 本次测试环境如下: Word版本:2013 编译环境:IntelliJ IDEA2018 Work库:free spire.doc ...
- Codeforces-121C(逆康托展开)
题目大意: 给你两个数n,k求n的全排列的第k小,有多少满足如下条件的数: 首先定义一个幸运数字:只由4和7构成 对于排列p[i]满足i和p[i]都是幸运数字 思路: 对于n,k<=1e9 一眼 ...