迭代器的使用

参考:

  • 生成器
  • 迭代器
  • next函数

迭代器的使用

说到迭代器就必须先要提一下可迭代对象(iterable),可迭代对象是能够逐一返回其成员项的对象。可迭代对象包括序列类型(如list、str、tuple)和非序列类型(如dict、文件对象、定义 __iter__() 方法或实现了 Sequence 语义的 __getitem__() 方法的任意自定义类对象。)。一个可迭代对象都有一个__iter__()方法,也就是说有__iter__()方法的对象,就是可迭代对象。

迭代器

在Python中,迭代器是遵循迭代协议的对象,用来表示一连串数据流。重复调用迭代器的__next__()方法(或将其传给内置函数 next())将逐个返回数据流中的项。当没有数据可用时则将引发 StopIteration 异常。

迭代器分为两类:

  • 使用iter()从任何序列对象中得到迭代器(如list, tuple, dict, set等)。
  • 输入迭代器generator (包括生成器和带 yield 的函数)。

迭代器有两个基本方法:

  • iter() 返回一个迭代器对象
    next() 逐一返回迭代对象中的项

迭代器的使用

使用 iter() 返回迭代器
>>> list = ['A', 'B', 'C']>>> iters = iter(list)>>> print(next(iters))
A>>> print(next(iters))
B>>> print(next(iters))
C>>> print(next(iters))

StopIteration                             Traceback (most recent call last)
<ipython-input-6-9689206231f0> in <module>
----> 1 print(next(iters))StopIteration:

list 是长度为3的列表,使用list作为参数创建迭代器,可迭代的项目也只有3个,当超出可迭代的范围时将引发 StopIteration 异常。

使用 for 遍历迭代器

迭代器对象可以使用for语句进行遍历。

list = ['A', 'B', 'C']
iters = iter(list)
for i in iters:print(i)

输出结果:

A
B
C
文件迭代

逐行读取文本文件的内容
方法一:

for i in open("test.txt", encoding="utf-8"):print(i)

方法二:

# 打开文件
file_path = "example.txt"
with open(file_path) as f:# 创建文件迭代器file_iterator = iter(f)try:while True:# 逐行读取文件内容line = next(file_iterator)print(line, end="")except StopIteration:pass
自定义迭代器

一个类通过实现 __iter__() __next__()方法来创建一个迭代器。

迭代器必须有 __iter__() 方法用来返回该迭代器对象自身。

class MyIter:def __init__(self, m):self.data = mself.length = len(m)self.index = -1def __iter__(self):return selfdef __next__(self):if self.index < self.length-1:self.index += 1else:raise StopIteration return self.data[self.index]iters = MyIter(['A', 'B', 'C'])
for i in iters:print(i)# print(next(iters))# print(next(iters))# print(next(iters))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud Consul基础入门与使用实践总结

【1】Consul简介 官网地址&#xff1a;https://www.consul.io/intro/index.html 下载地址&#xff1a;https://www.consul.io/downloads.html 中文文档&#xff1a;https://www.springcloud.cc/spring-cloud-consul.html ① 基础概念 Consul 是一套开源的分布式服务发现和…

JavaWeb前端有哪些:深度解析与全面概览

JavaWeb前端有哪些&#xff1a;深度解析与全面概览 在JavaWeb开发领域&#xff0c;前端技术扮演着至关重要的角色。那么&#xff0c;JavaWeb前端究竟包含哪些内容呢&#xff1f;本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;为您深入剖析JavaWeb前端的技术栈和…

网络编程(五)

网络编程&#xff08;五&#xff09; 网络服务器超时检测使用select进行超时检测套接字属性**getsockopt:获取socket软通道的某项属性值**setsockopt:设置socket软通道的某项属性值**&#xff08;socket建立之后就可使用&#xff09; 信号**signal()&#xff1a;信号处理函数se…

Android11 AudioTrack 创建过程

Android 系统播放声音&#xff0c;需要创建AudioTrack来和AudioFlinger通信&#xff0c;其创建过程如下 根据传入的声音属性得到output通过得到的output&#xff0c;找到播放线程AudioFlinger在播放线程内&#xff0c;创建Track&#xff0c;和AudioTrack对应。后续通过它们进…

MiniQMT国债逆回购策略Python代码全解析

文章目录 💼 国债逆回购:稳赚不赔的秘密武器📈 国债逆回购基础知识📝 国债逆回购策略逻辑💻 Python代码实现📊 策略优化与风险管理🌐 结语💼 国债逆回购:稳赚不赔的秘密武器 国债逆回购,一种低风险、高流动性的投资方式,是股市小白向高手进阶的必经之路。本…

每天一个数据分析题(三百四十五)

客户生命周期主要分为新增、留存和流失三个阶段&#xff0c;以下描述正确的是&#xff1f; A. 客户生命周期有起点没有终点 B. 新增阶段主要描述商家从不同渠道获取的新增客户的数量及质量 C. 留存阶段是整个客户生命周期中时间跨度最长的阶段 D. 若客户在单位时间内没有触…

低代码设计中的组织结构的作用与模式

一、组织结构的作用 在低代码设计中&#xff0c;组织结构是系统运作的基石&#xff0c;它定义了系统中的关键元素&#xff0c;包括人员、部门、角色&#xff0c;以及一人多部门、一人多部门多角色的复杂关系。这种定义不仅为系统提供了清晰的运行框架&#xff0c;还确保了系统…

这是一张单纯的图片

说明&#xff1a;通过简单的一张图片找到flag。 打开给出的图片&#xff0c;是一个卡通头像。 方法一&#xff1a; 使用notepad再次打开图片&#xff0c;最后一行发现一行编码。 通过给出的编码格式&#xff0c;可判断是ASCII编码。 使用Ascii编码解码工具&#xff0c;对这串…

解决uniApp单独设置小程序的样式不起作用方法之一

问题点&#xff1a;在uniApp项目中单独设置了微信小程序员端的样式&#xff0c;结果发现设置的不起作用 原因&#xff1a;作用域的问题&#xff08;因为我设置了scoped&#xff0c;删除掉就好了&#xff09; /**我是这么设置的**/ <style scoped>/* #ifdef MP-WEIXIN */p…

贾英才医生:什么是脑白质病?如何预防此病?

贾英才医生&#xff0c;目前就任于北京崇文门中医医院&#xff0c;作为在医学领域有着深厚造诣和丰富经验的专业人士&#xff0c;在此深入探讨和剖析这样一个重要的医学话题&#xff1a;究竟什么是脑白质病&#xff1f;以及我们应该采取怎样切实可行的措施来有效预防此种疾病的…

前端框架原理自测题:根据 JSX / Vue 模板写出 render 函数 / VNode

JSX <div className"container"><p onClick{onClick} data-name"p1">hello <b>{name}</b></p><img src{imgSrc}/><MyComponent title{title}></MyComponent> </div>Vue 模板 <div class"co…

pip原理及常用命令

1、pip帮助文档 pip documentation 2、pip命令帮助 pip --help 或 pip 3、常用命令 pip install SomePackage # 最新版本 pip install SomePackage1.0.4 # 指定版本 pip install SomePackage>1.0.4 # 最小版本 pip install -i https://pypi.do…

计算机设备管理器端口不见了怎么办?

因为重装了系统&#xff0c;一切都得重新配置&#xff0c;但突然发现计算机资源设备里面端口这一选项居然不见了&#xff0c;这对一个嵌入式工程师是致命的&#xff0c;赶紧想想怎么处理 1、在电脑左下角windows右键&#xff0c;打开从上往下数第六个“资源管理器” 2、端口没…

Chrome 调试技巧

1. alert 在最早的时候&#xff0c;javascript 程序员调试代码都是通过 alert 进行&#xff0c;但 alert 会让整个程序被打断&#xff0c;并且还有一个很大的缺点&#xff0c;调试完成之后&#xff0c;如果忘记将 alert 删除 or 注释掉&#xff0c;导致别人访问该页面时会莫名…

迅狐短剧小程序源码:打造个性化的追剧体验

随着移动互联网的普及&#xff0c;短剧小程序源码的开发成为了影视爱好者的新宠。它不仅为用户提供了便捷的追剧体验&#xff0c;还通过推荐系统、观看历史、个性化喜好等特色功能&#xff0c;满足了用户的多样化需求。本文将深入探讨短剧小程序源码的特点、优势以及如何实现多…

创新指南|领导者如何评估自己的表现——麦肯锡专有的CEO卓越评估工具

CEO是任何组织中最具挑战性和要求最高的职位之一&#xff0c;尤其是在当前的经济环境下。这也是最重要的职位之一。研究表明&#xff0c;一家公司 45% 的业绩可归因于CEO的影响。但 CEO 们的实际表现如何&#xff1f;他们面临哪些问题&#xff1f;如何帮助他们发挥出最佳水平&a…

Java中的泛型类型参数详解

Java中的泛型机制为开发者提供了一种编写通用代码的强大工具&#xff0c;使得代码在编译时可以进行类型检查&#xff0c;从而减少运行时的错误。泛型类型参数可以帮助我们编写更加灵活和类型安全的代码。在Java的泛型类型参数中&#xff0c;我们经常会看到一些常见的符号&#…

代碼隨想录 day22|day23

二叉树(完) 二叉搜索树的最近公共祖先 题意&#xff1a;找到二叉树的两个节点的祖先节点 。 思路&#xff1a; 二叉树的中序遍历特性&#xff1a; 如果当前遍历的节点的值> 两个指定的节点的值。 那么祖先节点就在当前节点左子树 。 如果当前遍历节点的值< 两个节点的值…

赶紧收藏!2024 年最常见 20道 Kafka面试题(四)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道 Kafka面试题&#xff08;三&#xff09;-CSDN博客 七、Kafka数据一致性原理是什么&#xff1f; Kafka的数据一致性原理主要依赖于其内部的复制机制、分区策略、领导者与追随者&#xff08;Leader and Follower…

java-成员变量和局部变量

Java中的变量根据其作用域和生命周期可以分为两大类&#xff1a;成员变量&#xff08;Instance Variables&#xff09;和局部变量&#xff08;Local Variables&#xff09;。这两类变量在Java程序中扮演着重要的角色&#xff0c;它们用于存储程序运行时所需的数据。 一、成员变…