python itertools迭代器模块
itertools模块
1、创建属于自己的迭代器,实现遍历
2、快速&节约内存
无限迭代器:
count
cycle
repeat
count返回一系列值,以start参数开始,也可以接受step参数
无step方式:
from itertools import count
for i in count(10):
if i>20:
break
else:
print(i)
结果为:10 11 12 13 14 15 16 17 18 19 20
有step方式:
from itertools import count,islice:
for i in islice(count(10),10):
print(i)
结果为:10 11 12 13 14 15 16 17 18 19
解析:count从10开始,迭代10次后停止
cycle迭代器可实现在序列上创建无限循环的迭代器
用计数的方式实现有限迭代:
from itertools import cycle
count =0
for item in cycle("ABCDEFG"):
if count >20:
break
else:
print(item)
count+=1
结果为:A B C D E F G A B C D E F G A B C D E F G
解析:cycle("ABCDEFG")会生成一个由"A" "B" "C" "D" "E" "F" "G"组成的无限循环迭代器,可实现遍历
用python内置next()函数实现遍历迭代
from itertools import cycle
list1=["A","B","C","D","E","F","G"]
iterator=cycle(list1)
for i in range(20):
print(next(iterator))
结果为:A B C D E F G A B C D E F G A B C D E F
解析:cycle("ABCDEFG")会生成一个由"A" "B" "C" "D" "E" "F" "G"组成的无限循环迭代器,
每次调用next()函数会返回迭代器中的下一个值
repeat迭代器返回同一个对象,如不设定次数会无限迭代
指定迭代次数:
from itertools import repeat
iterator=repeat("txd",5)
for i in range(6):
print(next(iterator))
结果:txd txd txd txd txd
第六次执行迭代next()方法时报错:
Traceback (most recent call last):
File "D:\unitest\exercise\排序.py", line 4, in
print(next(iterator))
StopIteration
解析:由于指定了迭代次数为5,循环执行到第6次时会报错
不指定迭代次数:
from itertools import repeat
iterator=repeat("txd")
for i in range(20):
print(next(iterator))
结果:txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd txd