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