目录
- 1️⃣什么是可迭代对象
- 📗理解一
- 📘理解二
- 2️⃣什么是迭代器
- 📗理解
- ✔️注意
- 3️⃣迭代器对象
- ✨iter()
- ✨next()
- 🔋实例
- 4️⃣有关迭代的函数
- 🌱---- enumerate()
- 🌱---- map()
- 🌱---- zip()
- 🌱---- filter()
1️⃣什么是可迭代对象
📗理解一
-
Iterable
对象,就是可迭代对象,即可以用for...in...
进行遍历的对象,就叫可迭代对象。 - 比如列表,元组,字符串,字典等都属于可迭代对象。
📘理解二
- 一个对象如果实现了
__iter__
方法,那么我们称这个对象是可迭代对象。
2️⃣什么是迭代器
📗理解
- 一个实现了
__iter__
方法和__next__
方法,并且可以通过__next__
方法不断返回下一个值的对象称为Itertor
,即迭代器。 - 也就是说,迭代器均可以使用
for...in...
和next
逐一遍历。 - 迭代器的两个最基本的方法:
iter()
和next()
.
✔️注意
- 需要注意的是,列表,元组,字典,集合,字符串均实现了
__iter__
方法,但并未实现__next__
方法,所以这些对象并不能称为迭代器。
3️⃣迭代器对象
✨iter()
- 列表,元组,字符串等对象都可以使用
iter()
方法来创建迭代器对象。
✨next()
- 创建迭代器对象后就可以使用
next()
方法来访问元素 - 访问迭代器对象都是从第一个元素开始,直到访问结束
- 迭代器只能往前不会后退
🔋实例
>>> list_1 = [1,2,3]
>>> it_list = iter(list_1)
>>> print(next(it_list))
>>> 1
>>> print(next(it_list))
>>> 2
>>> print(next(it_list))
>>> 3
>>> print(next(it_list))
>>> Traceback (most recent call last):
...
StopIteration
- 显然,如果访问到迭代器对象的最后一个元素时继续访问,就会触发
StopIteration
异常
4️⃣有关迭代的函数
🌱---- enumerate()
语法:
enumerate(iterable, start=0)
用法:
- 返回一个索引和
enumerate
对象
参数:
-
iterable
----可迭代对象或迭代器 -
start
----索引值,默认为0
实例:
- 例1
>>>teams=['勇士', '热火', '骑士']
>>>enumerate(teams)
enumerate object at 0x000002E9569016C0>
>>>for t in enumerate(teams):
print(t, end = ' ')
...
(0, '勇士') (1, '热火') (2, '骑士')
- 例2
>>>teams=['勇士', '热火', '骑士']
>>>for i, t in enumerate(teams):
print(i, t, end=" ")
...
0 勇士 1 热火 2 骑士
例子3
>>>teams=['勇士', '热火', '骑士']
>>>t1 = enumerate(teams)
>>>t1.__next__()
(0, '勇士')
>>>t1.__next__()
(1, '热火')
>>>t1.__next__()
(2, '骑士')
>>>t1.__next__()
Traceback (most recent call last):
...
t1.__next__()
StopIteration
例4
>>>teams=['勇士', '热火', '骑士']
>>>t1 = enumerate(teams,2)
>>>t1.__next__()
(2, '勇士')
>>>t1.__next__()
(3, '热火')
>>>t1.__next__()
(4, '骑士')
>>>t1.__next__()
Traceback (most recent call last):
...
t1.__next__()
StopIteration
🌱---- map()
用法:
- 该函数用于将一个函数依次映射到可迭代对象的每个元素上,再返回一个
map
对象 - 实际上,
map
对象既是可迭代对象,也是一个迭代器对象
语法:
map(function, iterable, ...)
参数:function
---- 函数iterable
---- 可迭代对象,可以有多个iterable
返回:
- 该函数返回一个将
function
应用于iterable
中每一项并输出其结果的迭代器。 - 当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束
实例:
由于该函数返回的是迭代器,所有我们可以用list()
函数将结果转换为列表。
🌱---- zip()
用法:
- 将多个迭代器对象(或可迭代对象)中的元素压缩到一起,并返回一个
zip
对象 - 实际上,
zip
对象既是可迭代对象,也是一个迭代器对象
语法:
zip(iterable, ...)
参数:
iterable
----可迭代对象,可以有多个。
返回:
- 该函数在多个
iterable
上并行迭代,从每个可迭代对象上返回一个数据项组成元组。
也就是说, zip()
返回元组的迭代器,其中第 i 个元组包含的是每个参数迭代器的第 i 个元素。
如图:
需要注意的是:
- 如果若干个可迭代对象的长度不同,此时
zip()
在最短的迭代完成后停止。较长可迭代对象中的剩余项将被忽略
如图:
🌱---- filter()
用法:
- 传入带有一个参数的函数
function
,并返回一个filter
对象 -
filter
对象中的元素是由参数中的iterable
对象使得函数function
返回值为True的那些元素组成 - 通俗讲就是满足
function
函数条件的那些元素组成了filter
对象
- 实际上,
filter
对象既是可迭代对象,也是一个迭代器对象
语法:
filter(function, iterable)
参数:
function
----判断函数,用于过滤掉对象里不符合条件的元素iterable
----可迭代对象,如列表,元组等。
返回:
- 返回一个新的迭代器,其中的元素都符合判断函数的条件
实例:
我们可以利用list()
函数来转换filter()
函数的返回值
好了,分享结束,觉得文章不错的朋友点个赞呗~👍