如何遍历一个列表
for...in
for number in list(range(10)):
print(number) # 0 ~ 9
- 迭代器
it = iter(list(range(10)))
while True:
try:
print(next(it)) # 0 ~ 9
except StopIteration:
break
可迭代与迭代器
-
只要数据对象能够实现
__iter__
或__getitem__
的 方法就是可迭代对象;可迭代对象支持每次返回自己所包含的一个成员对象;可迭代对象都可以用for...in
来遍历; -
list
、tuple
、string
、dict
、set
、file
都是可迭代对象;自定义类只要其内部实现__iter__
或__getitem__
的方法,也是可迭代对象;
-
当对象调用
__iter__
或__getitem__
方法就在内存中创建了一个能遍历此对象的每一个元素的迭代器;调用迭代器的next()
方法可以遍历其每一个元素; -
迭代器提供了一种访问容器中各个元素的统一接口,即
next()
方法, 使用next()
方法可以依次访问容器中的元素;迭代器是不可逆的,当依次遍历完元素后,会返回Stopiteration
; -
自定义可迭代对象要想能够生成迭代器,不仅要有实现
__iter__
或__getitem__
的方法,同时还要定义__next__()
的方法,用于使迭代器指向下一个元素;
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def __next__(self):
self.a, self.b = self.b, self.a + self.b
return self.a
def __iter__(self):
return self
fib = Fibs()
for f in fib:
if f > 100:
print(f) # 144
break
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用