目录

  • 实例
  • 描述
    • 语法
    • 参数
    • 返回值
  • 弄清楚几个概念
  • 迭代
  • 有趣应用
  • 参考链接

先看几个实例

实例

>>> lst = [1, 2, 3]
>>> for i in iter(lst):
...     print(i)
Out[0]:
1
2
3
>>> b = iter(lst)
# 迭代器和列表的区别:经历一次for in之后,再次for in的话,再次遍历则返回空。
>>> for i in b:
...     print(i)
Out[1]:
1
2
3>>> for i in b:
...     print(i)
Out[2]:>>> type(b)
Out[3]: list_iterator
  • 列表和迭代器区别

    • 列表不论遍历多少次,表头位置始终是第一个元素;
    • 迭代器遍历结束后,不再指向原来的表头位置,而是为最后元素的下一个位置
fns = {'10min': 139, '20min': 159}
next(iter(fns.keys()))Out[7]: '10min'next(iter(fns.values()))Out[8]: 139
test = [2,3]
iter_test = iter(test)
next(iter_test)  Out[9]: 2next(iter_test)Out[10]: 3next(iter_test)Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration
d = {'one': 1, 'two': 2, 'three': 3}
d
Out[11]: {'three': 3, 'two': 2, 'one': 1}iterd = iter(d)  # 字典的迭代器会默认遍历字典的键(key)
next(iterd)Out[12] 'three'
next(iterd)
Out[13]'two'next(iterd)
Out[14]'one'>>> next(iterd)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration
  • 遍历列表,表头位置始终不变;
  • 遍历迭代器,表头位置相应改变;
  • next 函数执行一次,迭代对象指向就前进一次;
  • StopIteration 触发时,意味着已到迭代器尾部;

描述

iter() 函数用来生成迭代器。
iter()函数有两种用法,一种是传一个参数,一种是传两个参数。结果都是返回一个iterator对象。

所谓的iterator对象,就是有个next()方法的对象。next方法的惯例或约定(convention)是,每执行一次就返回下一个值(因此它要自己记录状态,通常是在iterator对象上记录),直到没有值的时候raiseStopIteration。

传1个参数:参数collection应是一个容器,支持迭代协议(即定义有__iter__()函数),或者支持序列访问协议(即定义有__getitem__()函数),否则会返回TypeError异常。

传2个参数:当第二个参数sentinel出现时,参数callable应是一个可调用对象(实例),即定义了__call__()方法,当枚举到的值等于哨兵时,就会抛出异常StopIteration。

语法

iter(object[, sentinel])

参数

  • object – 支持迭代的集合对象。
  • sentinel – 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。

返回值

迭代器对象

弄清楚几个概念

  • 可迭代对象iterable:python 中常见的可迭代对象:list、tuple、dict、set、str等。
  • 迭代器iterator:
    • Python 的 Iterator 对象表示的是一个数据流,Iterator 对象可以被 next() 函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration 错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next() 函数实现按需计算下一个数据,所以 Iterator 的计算是惰性的,只有在需要返回下一个数据时它才会计算。
    • Iterator 甚至可以表示一个无限大的数据流,例如全体自然数。而使用 list 是永远不可能存储全体自然数的。
    • 所以可迭代对象不是迭代器。
  • 迭代iter
    • 将可迭代对象变为迭代器的动作。

迭代

  • 如何迭代
    python 使用内置函数iter 进行迭代
'''
iter语法为: iter(object[, sentinel]),有两种方式使用
第一种如下
'''
list = range(6)
It = iter(list)'''
第二种,如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object,直至迭代到元素sentinel。
'''
from queue import Queueq = Queue()# 创建队列对象
for i in range(5):q.put(i)# 依次放入5个数字
q.put('END')# 放入结束标志def test():return q.get()# 取数据for item in iter(test, 'END'):# 持续执行test()函数,直到返回’END’print(item, end=' ')
  • 如何判断对象为可迭代对象
'''
使用内置函数isinstance 判断,例如判断列表是否可迭代
'''
from collections import Iterable
isinstance([], Iterable)## Output: True
  • 如何判断对象是否为迭代器
'''
使用内置函数isinstance 判断,例如判断列表是否可迭代
'''
from collections import Iterator
isinstance([], Iterator)## Output: False, 因为list还没有被转为迭代器,仅是可迭代对象
  • 迭代器执行逻辑
    迭代器被创建后,就可以使用 next 方法进行迭代,直至迭代器所有的元素全部被调用,程序抛出StopIteration 报错。
  • 如何使用迭代器
'''
主要是next 方法的使用
'''
# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:try:# 获得下一个值:x = next(it)except StopIteration:# 遇到StopIteration就退出循环break

有趣应用

a = [1, 2, 3, 4, 5, 6]...: b = zip(*([iter(a)] * 2))...: for i in b:...:     print(i)...:
(1, 2)
(3, 4)
(5, 6)list(zip([iter(a)]))
Out[35]: [(<list_iterator at 0x198cfdaea00>,)]list(zip(*[iter(a)]))
Out[36]: [(1,), (2,), (3,), (4,), (5,), (6,)]list(zip(*([iter(a)] * 2)))
Out[37]: [(1, 2), (3, 4), (5, 6)]list(zip(*([iter(a)] * 3)))
Out[38]: [(1, 2, 3), (4, 5, 6)]list([iter(a)])
Out[39]: [<list_iterator at 0x198cfdcc8e0>]for i in [iter(a)] * 2:print(i)<list_iterator object at 0x00000198CFD1C9A0>
<list_iterator object at 0x00000198CFD1C9A0>

参考链接

[1] Python iter() 函数 2022.7
[2] python iter( )函数 2016.7
[3] Python-迭代器iter-使用 2018.3
[4] Python怎么取出列表中的相邻元素?2020.5
[5] Python 笔记(03)— 列表和迭代器区别 2022.6

Python迭代器iter使用及python iter( )函数介绍相关推荐

  1. 『Python核心技术与实战』pandas.DataFrame()函数介绍

    pandas.DataFrame()函数介绍! 文章目录 一. 创建DataFrame 1.1. numpy创建 1.2. 直接创建 1.3. 字典创建 1.4. Series和DataFrame 二 ...

  2. 转载: Python os 模块的功能以及子函数介绍

    原文链接: python之os模块 - 程序生(Codey) - 博客园 https://www.cnblogs.com/cxscode/p/8085326.html 一.Python OS模块介绍 ...

  3. python中object转str_python的id()函数介绍 python怎么将objectid转为str

    python id函数的输出值问题 Python中id函数为什么会对不同对象返回相同值如果那两个对象指向的是相同的内存地址,也就是说内部指向的其实是一个对象,那他们的ID返回值就是一样的. pytho ...

  4. python迭代器好处_关于Python中迭代器的作用

    迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...

  5. Python基础(二):Numpy函数介绍:Meshgrid,mgrid,append等

    文章目录 np.meshgrid函数 np.mgrid函数 np.append()函数 [5] 参考资料 np.meshgrid函数 meshgrid函数通常使用在数据的矢量化上.它适用于生成网格型数 ...

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

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

  7. python迭代器_Python迭代器

    python迭代器 Good day learners! In our previous tutorial, we learned about Python Operator Overloading. ...

  8. python迭代器什么时候用_python迭代器与生成器用途是什么

    python迭代器的用途:用next函数获取下一个元素,只能向前取值,不会后退.python生成器的用途:动态提供数据,调用return生成一个StopIteration异常,通知next(it)函数 ...

  9. Python迭代器实现

    欢迎访问我的个人博客 https://vincillau.github.io/ 文章目录 欢迎访问我的个人博客 https://vincillau.github.io/ Python迭代器实现 引言 ...

  10. python中import re_Python编程之Re模块下的函数介绍

    re模块下的函数 compile(pattern):创建模式对象 import re pat=re.compile('A') m=pat.search('CBA') #等价于 re.search('A ...

最新文章

  1. python解决约瑟夫问题_Python实现约瑟夫环问题的方法
  2. [转]获取机器的硬件信息(CPU ID序列号, 主板信息,硬盘序列号,系统信息)
  3. 初学Java Web(7)——文件的上传和下载
  4. Java中log4j控制写入日志开关
  5. 畅享云游戏,AWS云峰会邀你零距离体验强化学习!
  6. tf.pad函数功能介绍
  7. SVT-AV1:开源编解码最新进展
  8. 机器学习算法总结--EM算法
  9. 无尽列表_8号无尽征途强势来袭,碎片商店列表更新,有136皮肤碎片的笑了
  10. 240多个jQuery插件 功能强大 齐全
  11. 冯诺依曼计算机主机,冯诺依曼计算机的基本思想是什么?
  12. 通过代理服务器下载网页
  13. 回波损耗和电压驻波比
  14. mysql基础命令集合
  15. 各种带有物理学特点的把妹法[转]
  16. 《你早该这么玩excel》大表哥伍昊新课开讲——顶你学堂独家
  17. 【DCANet2022】:DCANet: Differential Convolution Attention Network for RGB-D Semantic Segmentation
  18. 西门子1200PLC模拟量测温案例1
  19. 妙用Java 8中的 Function接口 消灭if...else...
  20. 【pandas问题】UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xca in position 0: invalid continuati

热门文章

  1. 69 MyBatis和Spring整合
  2. 微信小程序获取微信卡包发票原件及格式化发票信息
  3. spring中的aop的xml配置方式简单实例
  4. Unity 灯光及光照烘焙
  5. excel表格横向纵向变换_excel2016如何把纵向的数据变为横向
  6. The client-side rendered virtual DOM tree is not matching server-rendered content. 问题
  7. 第08课:Retained 消息和 LWT
  8. 打听同事工资,我被离职了
  9. 熵值法原理、应用及其Python实现
  10. 2015校园O2O商业模式解析——从水果切入