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

Python-迭代

1、迭代器

迭代器是一个对象,它可以记录遍历的相关信息,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器有两个基本的方法:iter() 和 next()。我们都过命令行工具,了解一下python的底层迭代机制

>>> items = [1,2,3]
>>> it = iter(items)
>>> next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

上面执行的流程

  • 根据给定的可迭代对象生成迭代器
  • 从迭代器中重复获取下一项
  • 如果成功获得了下一项,上一项已经消失
  • 如果在获取下一项时遇到“StopIteration”异常,则停止循环,因为后面没有其他项了

2、应用

1、不使用for循环实现对可迭代对象便利,可以使用什么实现遍历呢?
手动的遍历可迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常

def manual_iter():with open('test.txt') as f:try:while True:line = next(f)print(line, end='')except StopIteration:pass

2、自定义迭代器
Python 中创建自定义迭代器,需要实现一个类,该类必须包含 iter() 和 next() 方法。iter() 方法返回迭代器对象本身,next() 方法返回序列中的下一个元素

class EvenIterator:def __init__(self, lst):self.lst = lstself.index = 0def __iter__(self):return selfdef __next__(self):while self.index < len(self.lst):current = self.lst[self.index]self.index += 1if current % 2 == 0:return currentraise StopIterationmy_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]for i in EvenIterator(my_list):print(i)输出:
2
4
6
8
10

在上面的示例中定义了一个名为 EvenIterator 的类,该类接受一个列表作为参数。我们实现了 iter() 和 next() 方法来定义迭代器的行为,并在 next() 方法中使用 raise StopIteration 来指示迭代结束。

http://www.lryc.cn/news/124628.html

相关文章:

  • 【论文阅读】DEPCOMM:用于攻击调查的系统审核日志的图摘要(SP-2022)
  • 大语言模型之一 Attention is all you need ---Transformer
  • 数字鸿沟,让气候脆弱者更脆弱
  • Tomcat 部署优化
  • Django框架-使用celery(一):django使用celery的通用配置,不受版本影响
  • nvue语法与vue的部分区别
  • Java 开发工具 IntelliJ IDEA
  • 将vsCode 打开的多个文件分行(栏)排列,实现全部显示,便于切换文件
  • java中的同步工具类CountDownLatch
  • 路由器和交换机的区别
  • FreeRTOS(动态内存管理)
  • IntelliJ IDEA(简称Idea) 基本常用设置及Maven部署---详细介绍
  • 【LeetCode每日一题】——128.最长连续序列
  • Redis_缓存1_缓存类型
  • 模拟 枚举
  • 【实操】2023年npm组件库的创建发布流程
  • 缓存设计的典型方案
  • SQL笔记
  • UHPC的疲劳计算——兼论ModelCode2010的适用性
  • 关于elementui的input的autocomplete的使用
  • 即然利用反射机制可以破坏单例模式,有什么方法避免呢?
  • 【IDEA问题】下载不了源代码
  • 代码随想录第四十八天
  • 书写自动智慧:探索Python文本分类器的开发与应用:支持二分类、多分类、多标签分类、多层级分类和Kmeans聚类
  • 前端Webpack面试题
  • LabVIEW使用边缘检测技术实现彩色图像隐写术
  • 第一次参加计算机会议报告注意事项以及心得
  • TypeScript教程(二)基础语法与基础类型
  • 问道管理:网上如何打新股?
  • 重磅更新,HertzBeat 集群版发布,易用友好的开源实时监控系统!