Python基础教程

006_Python迭代器

Python迭代器

Python迭代器的理解

迭代器是一个对象(类),用于遍历容器对象。很多语言(C++和Java)中都有容器和迭代器。迭代器提供一个遍历不同类型容器的通用形式。遍历容器的普通方法是各自循环取值,遍历容器的通用方法是用迭代器循环取值。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器的创建和访问有两个基本的方法:iter()next()

迭代器的创建

迭代器的创建有多种方法。

  • 使用iter()函数创建迭代器
  • 利用生成器创建迭代器(前面已讲过)
  • 自定义对象(类),实现__iter_()方法_next__()方法(目前不讲)

使用iter()函数可以把字符串、列表或元组对象转换成迭代器对象。

mylist=[1,2,3]
myit=iter(mylist)
print(next(myit))
print(next(myit))
print(next(myit))

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
1
2
3

Process finished with exit code 0

迭代器的遍历

迭代器的遍历需要用循环取出。有两种方式,分别是for和while。

使用for遍历迭代器。

mylist=[1,2,3]
myit=iter(mylist)
for item in myit:
    print(item)

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
1
2
3

Process finished with exit code 0

使用while与next()函数遍历迭代器。

try...except是异常处理方法,以后会讲到。

import sys

mylist=[1,2,3]
myit=iter(mylist)

while 1:
    try:
        print(next(myit))
    except StopIteration:
        sys.exit()

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
1
2
3

Process finished with exit code 0

next()取值时,超过最后一个元素后就会报StopIteration异常。

mylist=[1,2,3]
myit=iter(mylist)
print(next(myit))    # 1
print(next(myit))    # 2
print(next(myit))    # 3
print(next(myit))    # 异常 StopIteration

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
1
2
3
Traceback (most recent call last):
  File "E:/wkp01/p00/test01/py001/t09.py", line 6, in <module>
    print(next(myit))    # 异常 StopIteration
StopIteration

Process finished with exit code 1

迭代器与可迭代对象之间的关系

迭代器(Iterator)为成串数据(如容器)提供通用遍历(循环)的方法。

可迭代对象(Iterable)指的是“成串数据”,比如list、tuple、dict、set、str等类型的数据。可迭代对象不用迭代器也能遍历,比如使用for。

迭代器对象内部实现了iter_()方法_next()方法,可以使用for方法遍历,也可以使用next()遍历。

可迭代对象内部只实现了iter()方法,能用for遍历,不能用next()遍历。

Python中可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

判断一个对象是否是Iterator对象,可以使用isinstance()函数。

from collections.abc import Iterable,Iterator
mylist=[1,2,3]
print(mylist)                       # [1, 2, 3]
print(type(mylist))                 # <class 'list'>
print(isinstance(mylist,Iterable))  # True
print(isinstance(mylist,Iterator))  # False

myit=iter(mylist)
print(myit)                          # <list_iterator object at 0x000002187B065FC8>
print(type(myit))                    # <class 'list_iterator'>
print(isinstance(myit,Iterable))     # True
print(isinstance(myit,Iterator))     # True
这篇文章对您有用吗?

我们要如何帮助您?