迭代
可以直接作用于for循环的对象,称为可迭代对象Iterable:
1.集合数据类型:list,tuple,set,dict,str
2.generator:包括生成器和带yield的generator funcionlist迭代
1
2
3list = [1,2,3,4,5]
for a in list:print(a,end=' ')
print()dict迭代
1
2
3
4
5d = {'a': 1, 'b': 2, 'c': 3}
for key in d:print(key,end=' ')
print()
for value in d.values():print(value,end=' ')
print()字符串迭代
1
2for a in 'afsf':print(a,end=' ')
print()判断是否可以迭代
1
2from collections import Iterable
print(isinstance(list,Iterable))list变成索引-元素对的例子
1
2for i,value in enumerate(['a','b','c']):
print(i,value)
迭代器
可以被next()不断调用并返回下一个值的对象称为Iterator
集合数据类型list,tuple,set,dict,str都是,Iterable,但都不是Iterator\
for循环内部实际上就是先调用iter()把Iterable转为Iterator再进行循环迭代的迭代器判断
1
2
3
4
5
6
7
8
9
10
11from collections import Iterator
print(isinstance((),Iterator))
print(isinstance({},Iterator))
print(isinstance([],Iterator))
print(isinstance('fsaf',Iterator))
#使用iter()函数变成Iterator
from collections import Iterator
print(isinstance(iter(()),Iterator))
print(isinstance(iter({}),Iterator))
print(isinstance(iter([]),Iterator))
print(isinstance(iter('fsaf'),Iterator))为什么list不是Iterator
Iterator表示一个数据流,我们可以知道它的长度,通过next()来计算下一个数据,可以是无限长的
Iterator是一个惰性序列,它的计算是惰性的,需要返回下一个数据时才会去计算
而集合数据类型是无法达到这样的功能的