参考:
Note:
- 更多连载请查看【python】
1 iterable 和 iterator
可迭代对象:可以简单的理解为可以用 for 循环遍历的
或者配合 isinstance
来判断,如下所示
from collections import Iterable
print(isinstance("Kobe Bryant", Iterable)) # string
print(isinstance({
}, Iterable)) # dict
print(isinstance((), Iterable)) # tuple
print(isinstance([], Iterable)) # list
print(isinstance(set(), Iterable)) # set
print(isinstance(123, Iterable)) # int
print(isinstance(123.0, Iterable)) # float
print(isinstance(True, Iterable)) # bool
True
True
True
True
True
False
False
False
注意可迭代对象不一定是迭代器!
list1 = [11, 22, 33]
next(list1)
会报错
TypeError: 'list' object is not an iterator
迭代器才可以 next
,可迭代对象升级为迭代器用 iter
list1 = [11, 22, 33]
list1 = iter(list1)
print(next(list1))
print(next(list1))
print(next(list1))
print(next(list1))
会依次输出 list1 中的元素,直到榨干为止(StopIteration
)
11
22
33
Traceback (most recent call last):
File "/home/Experiments/1.py", line 8, in <module>
print(next(list1))
StopIteration
迭代器
只能往后next(),不能回退
迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁
这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个 G 的文件
再举一个例子
set1 = {
1, 2, 3}
print(set1[0])
报错了
TypeError: 'set' object does not support indexing
集合不支持索引,我们可以借助迭代器依次访问
iterator = iter(set1)
print(type(iterator))
print(iterator)
print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
<class 'set_iterator'>
<set_iterator object at 0x7f7612d578b8>
1
2
3
Traceback (most recent call last):
File "/home/yanmeng/Experiments/Scene_Cls/1.py", line 14, in <module>
print(next(iterator))
StopIteration
Note:
- 更多连载请查看【python】