news 2026/4/23 4:17:09

8.8 迭代器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
8.8 迭代器

文章目录

  • 前言
  • 一、迭代与可迭代对象
    • 1.1 什么是迭代?
    • 1.2 可迭代对象
    • 1.3 自定义可迭代对象
  • 二、迭代器
    • 2.1 什么是迭代器?

前言

本文主要介绍了迭代与可迭代对象以及迭代器的基础知识。


一、迭代与可迭代对象

1.1 什么是迭代?

迭代是指通过重复执行某个过程来逐项访问集合中的元素。在Python中,我们经常使用 for 循环进行迭代。

pythonprint("迭代的基本概念:")print("="*50)# 字符串迭代print("1. 字符串迭代:")forcharin"Hello":print(f"{char}")print("\n2. 列表迭代:")# 列表迭代fruits=["apple","banana","cherry"]forfruitinfruits:print(f"{fruit}")print("\n3. 字典迭代:")# 字典迭代person={"name":"Alice","age":25,"city":"New York"}forkeyinperson:print(f"{key}:{person[key]}")# 更优雅的字典迭代方式print("\n 字典项迭代:")forkey,valueinperson.items():print(f"{key}:{value}")print("\n4. 使用enumerate同时获取索引和值:")# 使用enumerate获取索引和值colors=["red","green","blue"]forindex,colorinenumerate(colors):print(f" 索引{index}:{color}")print("\n5. 使用zip同时迭代多个序列:")# 使用zip同时迭代多个序列names=["Alice","Bob","Charlie"]scores=[85,92,78]forname,scoreinzip(names,scores):print(f"{name}:{score}分")

1.2 可迭代对象

可迭代对象是实现了iter() 方法的对象,或者实现了getitem() 方法且参数从0开始索引的对象。Python中大多数容器类型都是可迭代的。

pythonfromcollections.abcimportIterableprint("可迭代对象判断:")print("="*50)# 判断各种类型是否为可迭代对象test_items=[("字符串","Hello"),("列表",[1,2,3]),("元组",(1,2,3)),("集合",{1,2,3}),("字典",{"a":1,"b":2}),("range对象",range(5)),("数字",123),("布尔值",True),("None",None),("文件对象",open(__file__,'r')),("生成器",(xforxinrange(3))),]forname,itemintest_items:try:is_iterable=isinstance(item,Iterable)print(f"{name:15}是可迭代对象:{is_iterable}")# 尝试使用for循环验证ifis_iterableandnamenotin["文件对象","生成器"]:# 对于文件对象和生成器,我们不在这里迭代print(f" 示例迭代: ",end="")count=0forelementinitem:ifcount<3:# 只显示前3个元素print(f"{element}",end=" ")count+=1else:print("...",end="")breakprint()exceptExceptionase:print(f"{name:15}检查出错:{e}")print()# 注意:对于文件对象需要关闭ifisinstance(test_items[9][1],Iterable):test_items[9][1].close()print("可迭代对象的特点:")print("1. 可以使用 for 循环进行遍历")print("2. 可以使用 iter() 函数获取迭代器")print("3. 可以使用解包操作")print("4. 可以作为某些函数的参数(如 sum(), max(), min())")

1.3 自定义可迭代对象

pythonprint("自定义可迭代对象:")print("="*50)# 方法1:实现 __iter__() 方法classMyIterable1:"""通过实现 __iter__() 方法创建可迭代对象"""def__init__(self,data):self.data=datadef__iter__(self):# 返回一个迭代器returniter(self.data)# 方法2:实现 __getitem__() 方法classMyIterable2:"""通过实现 __getitem__() 方法创建可迭代对象"""def__init__(self,data):self.data=datadef__getitem__(self,index):returnself.data[index]def__len__(self):returnlen(self.data)# 测试自定义可迭代对象print("1. 实现 __iter__() 方法的类:")my_iter1=MyIterable1([10,20,30,40,50])print(f" 类型:{type(my_iter1)}")print(f" 是否可迭代:{isinstance(my_iter1,Iterable)}")print(" 迭代结果:",end=" ")foriteminmy_iter1:print(item,end=" ")print()print("\n2. 实现 __getitem__() 方法的类:")my_iter2=MyIterable2(["A","B","C","D","E"])print(f" 类型:{type(my_iter2)}")print(f" 是否可迭代:{isinstance(my_iter2,Iterable)}")print(" 迭代结果:",end=" ")foriteminmy_iter2:print(item,end=" ")print()print("\n3. 使用iter()函数获取迭代器:")# iter()函数的工作方式data=[1,2,3]iterator=iter(data)# 相当于 data.__iter__()print(f" 原始数据:{data}")print(f" 迭代器:{iterator}")print(f" next(iterator):{next(iterator)}")print(f" next(iterator):{next(iterator)}")print(f" next(iterator):{next(iterator)}")try:print(f" next(iterator):{next(iterator)}")exceptStopIterationase:print(f" 捕获 StopIteration 异常:{e}")print("\n4. 迭代器耗尽后重新获取:")# 迭代器只能使用一次,需要重新获取iterator1=iter(data)iterator2=iter(data)print(f" iterator1 - next():{next(iterator1)}")print(f" iterator2 - next():{next(iterator2)}")print(f" iterator1 - next():{next(iterator1)}")print(f" iterator2 - next():{next(iterator2)}")

二、迭代器

2.1 什么是迭代器?

迭代器是实现了迭代器协议的对象,必须包含两个方法:

iter():返回迭代器自身

next():返回下一个元素,如果没有元素则抛出 StopIteration 异常

pythonfromcollections.abcimportIteratorprint("迭代器详解:")print("="*50)# 判断各种对象是否为迭代器test_objects=[("列表",[1,2,3]),("列表的迭代器",iter([1,2,3])),("字符串","abc"),("字符串的迭代器",iter("abc")),("range对象",range(3)),("range对象的迭代器",iter(range(3))),("生成器表达式",(xforxinrange(3))),]print("检查是否为迭代器:")forname,objintest_objects:is_iterator=isinstance(obj,Iterator)print(f"{name:20}是迭代器:{is_iterator}")print("\n迭代器的特点:")print("1. 迭代器一定是可迭代的")print("2. 迭代器只能前进,不能后退")print("3. 迭代器是惰性的,只在需要时计算下一个值")print("4. 迭代器只能遍历一次,遍历完后需要重新创建")

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:56:45

VoxCPM-1.5-TTS-WEB-UI支持语音合成任务依赖管理

VoxCPM-1.5-TTS-WEB-UI&#xff1a;让大模型语音合成真正“可用” 在内容创作、智能客服、教育科技等领域&#xff0c;高质量的语音合成不再是锦上添花的功能&#xff0c;而逐渐成为产品体验的核心环节。然而&#xff0c;许多团队在引入TTS技术时仍面临一个现实困境&#xff1a…

作者头像 李华
网站建设 2026/4/23 11:21:23

VoxCPM-1.5-TTS-WEB-UI支持语音合成任务依赖环境变量

VoxCPM-1.5-TTS-WEB-UI&#xff1a;基于环境变量的轻量化中文语音合成系统解析 在AI语音技术快速渗透日常生活的今天&#xff0c;从智能音箱到有声读物生成&#xff0c;再到虚拟主播配音&#xff0c;高质量、个性化的文本转语音&#xff08;TTS&#xff09;能力正变得不可或缺。…

作者头像 李华
网站建设 2026/4/22 23:15:54

C语言在启明910芯片上的应用深度解析(芯片手册精读笔记)

第一章&#xff1a;C语言与启明910芯片的协同设计概述在高性能嵌入式系统开发中&#xff0c;启明910芯片凭借其高能效比和强大的并行计算能力&#xff0c;广泛应用于边缘计算、智能感知和实时控制场景。为充分发挥其硬件潜力&#xff0c;C语言作为底层开发的核心工具&#xff0…

作者头像 李华
网站建设 2026/4/23 12:52:32

VoxCPM-1.5-TTS-WEB-UI支持语音合成任务超时中断机制

VoxCPM-1.5-TTS-WEB-UI 支持语音合成任务超时中断机制 在当前AI驱动的语音交互浪潮中&#xff0c;文本转语音&#xff08;TTS&#xff09;技术早已不再是“能出声就行”的简单工具。随着大模型能力的跃升&#xff0c;用户对音质、响应速度和操作体验的要求也在不断攀升。尤其是…

作者头像 李华
网站建设 2026/4/23 14:29:23

MeterSphere API文档终极指南:从零开始快速上手

MeterSphere API文档终极指南&#xff1a;从零开始快速上手 【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台&#xff0c;为软件质量保驾护航。搞测试&#xff0c;就选 MeterSphere&#xff01; 项目地址: https://gitcode.com/gh_mirrors/me/metersphere …

作者头像 李华
网站建设 2026/4/23 9:30:49

PCSX2模拟器性能调优实战指南

PCSX2模拟器性能调优实战指南 【免费下载链接】pcsx2 PCSX2 - The Playstation 2 Emulator 项目地址: https://gitcode.com/GitHub_Trending/pc/pcsx2 还在为PS2游戏在电脑上卡顿而烦恼吗&#xff1f;PCSX2作为目前最优秀的PlayStation 2模拟器&#xff0c;通过正确的配…

作者头像 李华