欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Python中的可迭代对象详解

最编程 2024-01-13 21:15:47
...



1 可迭代对象

Python中,列表、元组、字典、集合、字符串等类型的数据可以使用​​for ..in...​​的语法从其中依次取到数据来使用,这样的过程称为遍历,也叫迭代。

可迭代对象:可以通过​​for ..in...​​这类语句迭代读取一条数据给用户使用的对象。

下面是一段列表的迭代示例代码:

>>> list1 = [1, 2, 3]
>>> for n in list1:
... print(n)
...
1
2
3

下面是一段字典的迭代示例代码:

>>> dict1 = {'one':1, 'two':2, 'three':3}
>>> for key in dict1.keys():
... print(key)
...
one
two
three

2 判断对象是否为可迭代的

使用​​isinstance​​判断一个对象是否为可迭代对象(Iterable)

示例代码如下:

from collections import Iterable

>>> isinstance([1,2,3], Iterable) # 列表为可迭代对象
True
>>> isinstance({1,2,3}, Iterable) # 集合为可迭代对象
True
>>> isinstance(100, Iterable)
False

3 可迭代对象的本质

分析迭代的过程,可发现:每迭代一次(即在for…in…中每循环一次),都会返回对象中的下一条数据,一直向后读取,直到迭代完全部数据才结束。

在迭代过程中,应该有一个“记录员”去记录每次访问到第几条数据,以便每次迭代都可以返回下一条数据。Python将这个“记录员”称为迭代器。可迭代对象的本质是:这个对象提供给用户一个迭代器,来帮助用户在遍历对象时使用。

可迭代对象通过​​__iter__​​方法通过给我们一个迭代器。当用户在迭代一个可迭代对象时,实际上就是先获取该对象提供的迭代器,然后通过这个迭代器来一次获取对象中的每一个数据。

具备__iter__方法的对象,就是一个可迭代对象。

示例代码如下:

>>> from collections import Iterable

>>> class MyList(object):
... def add(self, item):
... self.container = []
... def add(self, item):
... self.container.append(item)
... def __iter__(self):
... """返回一个迭代器"""
... # 暂时忽略如何构造一个迭代器对象
... pass
...
>>> mylist = MyList()
>>> isinstance(mylist, Iterable) # mylist对象是一个可迭代对象
True

4 iter()与next()

对于可迭代对象,可以使用iter()函数得到这些可迭代对象的迭代器,然后对迭代器使用next()函数来获取下一条数据。(iter()函数调用了可迭代对象的__iter__方法)

示例代码如下:

>>> list1 = [1, 2, 3]
>>> list1_iter = iter(list1)
>>> next(list1_iter)
1
>>> next(list1_iter)
2
>>> next(list1_iter)
3
>>> next(list1_iter)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration

在使用next()迭代完最后一个元素后,再次调用next就会抛出StopIteration异常,以此来告诉我们所有元素均迭代完成。

推荐阅读