如何遍历一个列表
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