该模块包含了一系列处理可迭代对象(sequence-like)的函数,从此迭代更任性,简要介绍,原文见Python itertools模块详解。
迭代器有一些特点,比如lazy,也就是只有用到的时候才读入到内存里,这样更快更省内存;比如只能调用一次,会被消耗掉。
import itertools as itls
合并迭代器: chain()与izip()
chain()
函数接收n个可迭代对象,然后返回一个他们的合集的迭代器,纵向合并,上例子。
for i in itls.chain([1,2,3],['a','b','c']):
print i,
1 2 3 a b c
izip()
函数接收n个可迭代对象,然后将其合并成tuples,横向合并,功能类似zip()
,只是返回的是iterator,而不是list。
for i, j in itls.izip([1,2,3],['a','b','c']):
print i, j
1 a
2 b
3 c
切分迭代器: islice()
islice()
函数接收一个迭代器,然后返回其切片,类似于list
的slice
切片操作。参数有start
,stop
和step
,其中start
和step
参数时可选参数。
print "Stop at 5:"
for i in itls.islice(itls.count(),5):
print i,
Stop at 5:
0 1 2 3 4
print "Start at 5, Stop at 10:"
for i in itls.islice(itls.count(),5,10):
print i,
Start at 5, Stop at 10:
5 6 7 8 9
print "By tens to 100:"
for i in itls.islice(itls.count(),0,100,10):
print i,
By tens to 100:
0 10 20 30 40 50 60 70 80 90
复制迭代器: tee()
与Unix里tee
方法语意一样,这里接收一个迭代器,然后返回n个(default 2)一样的迭代器。
r = itls.islice(itls.count(),4)
i1, i2, i3 = itls.tee(r,3) # i1 and i2, like a copy
for i<