Python迭代器
1,什么是迭代。
迭代是访问集合元素的一种方式。
2,什么是迭代器。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象是从集合的第一个元素开始访问,直到所有元素被访问完结束,即只能往前,不能后退。
迭代器有两个基本方法:iter()和next()
根据迭代器的定义可得:字符串、列表、元组、字典、集合等的对象都可用于创建迭代器。可以使用常用的for循环遍历。
list1=[1,2,3,4]
n=iter(list1) #创建迭代器对象
print(next(n))#输入迭代器第一个元素
print(next(n))#输入迭代器第一二个元素
print(next(n))#输入迭代器第一二三个元素
print(next(n))#输入迭代器第一二三四个元素
以上逐个print()看起来会复杂,如果元素过多,会造成代码冗杂。可以引入sys模块,使用next函数将代码简单处理。
import sys
list1=[1,2,3,4]
n=iter(list1)
while True:
try:
print(next(n))
except StopIteration:
sys,exit()#元素遍历完退出循环
for循环遍历用例
list2=[4,3,2,5,6,7,8,9]
m=iter(list2)
for i in m: #for循环遍历list2
print(i,end=' ') #end='':输出不换行
3,迭代器的创建。
除了列表、元组、集合、字典的对象可以作为迭代器,我们学过的类也可以作为迭代器使用。把类作为迭代器使用需要在类中实现__iter__()与__next__().
我们知道,Python中,类都有一个构造函数__init__(),它会在对象初始化的时候执行。
iter():返回一个特殊的迭代器对象, 这个迭代器对象实现了 next() 方法并通过 StopIteration 异常标识迭代的完成。
next():返回下一个迭代器对象。
#创建一个返回数字的迭代器:
class Num:
def __iter__(self):
self.a=1
return self
def __next__(self):
x=self.a
self.a+=1
return x
myclass=Num()
myiter=iter(myclass)#创建迭代器对象
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
为了防止无限循环,StopIteration终止,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)