当前位置: 首页 > news >正文

Python之访问集合的迭代器

对迭代器的理解对于我们访问数据量大是有很大的帮助,将介绍它。
一、概念
迭代:是访问集合元素的一种方式,按照某种顺序逐个访问集合中的每一项。

可迭代对象:能够被迭代的对象,称为可迭代对象
判定依据:能作用于 for in
判定方法:
import collections
isinstance(obj, collections.Iterable)

import collectionsnums = [1,2,3,4,5]
result = isinstance(nums, collections.abc.Iterable) # 是迭代对象
print(result)
True

迭代器:是可以记录遍历位置的对象,从第一个元素开始,往后通过next()函数,进行遍历,只能往后,不能往前,
判定依据:能作用于next()函数
判定方法:
import collections
isinstance(obj, collections.Iterator)

print(isinstance(nums, collections.abc.Iterator)) #  不是迭代器
next(nums)False
Traceback (most recent call last):File "D:\python基础\迭代器\访问集合方式-迭代器.py", line 17, in <module>next(nums)
TypeError: 'list' object is not an iterator

注意:迭代器也是可迭代对象,所以也能做作用for in

二、为什么会产生迭代器?
1、仅仅在迭代到某个元素时才处理该元素,在此之前,元素可以不存在,在此之后,元素可以被销毁,特别适合用于遍历一些巨大的或是无限集合。如:斐波拉契数组
2、提供了一个统一的接口,可以把所欲的可迭代对象,转换成迭代器使用。
格式:iter(Iterable),
举例:iter(str) iter(list) iter(tuple) iter(dict)…

3、迭代器简单使用
使用next()函数,从迭代器中取出下一个对象,从第一个元素开始
因为迭代器比较常用,所以在python中,可以直接作用于for in
内部会自动调用迭代器的对象next(),会自动处理迭代完毕的错误.

注意:
若取出完毕,在继续去,则会报错。StopIteration
迭代器一般不能多次迭代

it = iter(nums)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))1
2
3
4
5Process finished with exit code 0
使用next访问超过
it = iter(nums)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
Traceback (most recent call last):File "D:\python基础\迭代器\访问集合方式-迭代器.py", line 32, in <module>print(next(it))^^^^^^^^
StopIteration使用for in访问
for i in range(5):print(next(it))
1
2
3
4
5Process finished with exit code 0
http://www.lryc.cn/news/312596.html

相关文章:

  • 【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器
  • 在ubuntu上安装hadoop完分布式
  • Python 语句(二)【循环语句】
  • (3)(3.3) MAVLink高延迟协议
  • 【异常处理】Vue报错 Component template should contain exactly one root element.
  • Eth-trunk隧道
  • 【Ubuntu】将多个python文件打包为.so文件
  • FreeRtos自学笔记3-----参考正点原子视频
  • 使用J-Link Commander通过J-LINK以命令的形式来访问ARM通用MCU
  • 19.删除链表的倒数第N个节点
  • 【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子
  • java 面向对象 day3
  • Flink 大数据 学习详情
  • [项目设计] 从零实现的高并发内存池(四)
  • 02.URL的基本知识和使用
  • 人工智能指数报告2023
  • Android如何对应用进行系统签名
  • 【系统安全加固】Centos 设置禁用密码并打开密钥登录
  • 关于我在项目中封装的一些自定义指令
  • react经验11:访问循环渲染的子组件内容
  • Java开发工程师面试题(业务功能)
  • BUUCTF-Misc-百里挑一
  • 【力扣刷题练习】42. 接雨水
  • 鸿蒙实战开发:数据交互【RPC连接】
  • QLC SSD:LDPC纠错算法的优化方案
  • 【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?
  • ChatGPT高效提问——说明提示技巧
  • 从零学算法41
  • FPGA高端项目:FPGA基于GS2971的SDI视频接收+OSD动态字符叠加,提供1套工程源码和技术支持
  • UML-类图详解