迭代器与可迭代对象的区别以及判断方法

  • Post author:
  • Post category:其他


迭代是指重复的过程,是迭代取值的工具,迭代中的每一次重复都是基于上次一结果,提供了一种通用的不依赖索引的迭代取值方式。

可迭代对象可以通过 isinstance(obj,Iterable)来查看

from collections import Iterable
print(isinstance("abc",Iterable))
#输出为“True”

会运行出bool值,若为True则为可迭代对象,反之不是可迭代对象。

可迭代对象包含: str,list,tuple,dict,set,以及generator(生成器)。

迭代器一定是可迭代对象,但可迭代对象不一定是迭代器。

可通过以下方法查看是否为迭代器:

from collections import Iterator
li=[1,2,3]
print(isinstance(li,Iterator))
#输出为“Flase”

相同的会运算出bool值,以此来判断是否为迭代器。


那么迭代器到底是什么呢?

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

当我们遇到可迭代对象但想将它当作迭代器使用时可以使用iter()方法转化。

li_=iter(li)
print(type(li_))
#输出为“list_iterator",即已经转换为迭代器。


迭代器该怎么去取值呢?



注意不可以使用索引的方法取值,只能使用next()方法取值

print(li_._ _next_ _())
print(next(li_)
.......
.......
#当运行到末尾时,即超出长度时会报错。
#运行结果为 1
#          2
#          3
#          4
#    报错

li_._ _next_ _方法在这里和next()方法是一样的。

也可以使用遍历的方法取值

for i in li_:
    print(i)
#结果为1 2 3 4


总结:

1,可以用for循环的都是可迭代对象。(python中的for循环本质上都是通过不断调用next()来实现的)

2,作用于next()都是迭代器类型。

3,list,dict都是可迭代对象但是并非迭代器,因为next()不能调用它们,可使用iter()将它们转换为迭代器。



注意:当出现以下错误时


只需要在collections后加上abc即可。因为高版本的pycharm在使用此库有可能会出现错误。

import collections.abc from Iterator



版权声明:本文为Cobrander2_0原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。