无字天书之Python第十二页(迭代器基础)

博客目录

传送门

无字天书之Python第一页
无字天书之Python第二页
无字天书之Python第三页
无字天书之Python第四页
无字天书之Python第五页
无字天书之Python第六页
无字天书之Python第七页
无字天书之Python第八页
无字天书之Python第九页
无字天书之Python第十页
无字天书之Python第十一页

迭代器

迭代器可以简单的理解为for循环,Python除了for循环为我们准备了另一种访问集合元素的方式

特点

  1. 可以记住遍历的位置的对象。
  2. 迭代器从集合的第一个元素开始访问,直到所有的元素访问结束。
  3. 迭代器只能向前不能后退。

但是判断一个对象是否有迭代器除了看它能不能使用for循环外.Python也为我们提供了专业的方法isinstance()
我们可以使用isinstace()来判断当前对象是否可以迭代

使用前需要导入迭代器模块。

from collections.abc import Iterable

这里有一个小点注意一下,当我们在引入 Iterable 的时候,在之前的版本引入方式都是 from collections import Iterable ,然而在Python3.8之后是使用from collections.abc import Iterable

迭代器中,最重要的方法一定是 next() ,从名字上就能看出来,它的作用是下一个。

我们现在在尝试一个列表

list1=[1,2,3,4]
next(list1)

结果:

# Traceback (most recent call last):
#   File "E:/Python/DataType/twelve.py", line 11, in <module>
#     next(list1)
# TypeError: 'list' object is not an iterator

不是说好的列表是可以迭代的么,为什么又报错了。

这位同学,先消消气,看看报错信息说的是啥,这是在提示我们列表并不是一个迭代器。

所以,可迭代对象不一定是迭代器!

我们导入 Iterator 模块,先将列表转换成迭代器,再试试看。

list1=iter(list1)
print(type(list1))
print(next(list1))
print(next(list1))
print(next(list1))
print(next(list1))

结果:

<class 'list_iterator'>
1
2
3
4

但是当我们列表的元素迭代完后再迭代一次会报错

Traceback (most recent call last):
  File "E:/Python/DataType/twelve.py", line 21, in <module>
    print(next(list1))
StopIteration

看到了咯,会抛出 StopIteration 的异常。

可能看到这里,大家还是感觉迭代器没什么用,下面我再来举个例子,如果我们现在有一个 set 集合,我想要获取一个一个 set 集合中的元素,这时迭代器就派上用场了,因为在 set 集合中,是没有索引的,如果想要取到某个值,就只能使用 for 循环整个集合,但是有了迭代器以后,我们就无需循环整个集合了。
除此之外,迭代器有一个非常巨大的优势是在迭代之前,无需准备好所有的元素,迭代器仅在迭代到某个元素的时候才开始计算这个元素,在这之前或者之后,元素是可以不存在或者被销毁的。

这个特性使得它在遍历一些体积巨大的集合的时候,具有非常大的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值