Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。
1.count
count(start=0, step=1),创建一个能生成均匀分布序列(或者说等差数列)的迭代器,start指定起点,step指定步长。start, step不限于浮点数。注意,count()生成的是无限序列迭代器,所以用于循环中时,需要另外的条件来控制循环的终止。
import itertools
import time
natuals = itertools.count(start=0,step=2)
for n in natuals:
time.sleep(1)
print(n)
运行结果:
0
2
4
6
8
10
...
2.cycle
创建一个迭代器,从一个iterable中循环取出元素并输出。以下例子会输出比如:ABCDEABCDE
import itertools
import itertools as it
import time
k = 0
for item in it.cycle('ABCDE'):
print('k={0}, item={1}'.format(k, item))
k += 1
if k == 10:
break
运行结果:
k=0, item=A
k=1, item=B
k=2, item=C
k=3, item=D
k=4, item=E
k=5, item=A
k=6, item=B
k=7, item=C
k=8, item=D
k=9, item=E
3.repeat
创建迭代器,重复输出object。如果未指定times会无限输出,如果指定了times则重复输出指定次数。
import itertools
import itertools as it
import time
for item in it.repeat('Hello,Python!',5):
print('{0}'.format(item))
运行结果:
Hello,Python!
Hello,Python!
Hello,Python!
Hello,Python!
Hello,Python!
4.chain 创建一个迭代器,接收多个iterables参数,将它们串接起来,然后进行遍历。
import itertools as it
import time
for item in it.chain('ABCD','EFG','HIJ'):
print(item)
运行结果:
A
B
C
D
E
F
G
H
I
J
5.groupby
把迭代器中相邻的重复元素挑出来放在一起。
import itertools as it
import time
for key, group in it.groupby('AAABBBCCAAA'):
print(key, list(group))
运行结果:
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']
6.compress 根据selectors所列的各元素对原数据进行滤波处理,挑选出对应的selectors元素为True的data元素。selectors与data的元素是一一对应的。
import itertools as it
import time
#如果两者的元素个数不同时,则依据较短(元素个数较少)者进行遍历
print(list(it.compress('BCDEFG', [0,0,1,0,0,1,1]))) # ['D', 'G']
运行结果:
['D', 'G']