Python itertools模块详解
这货很强大,必须掌握
文档链接http://docs.python.org/2/library/itertools.html
pymotw链接http://pymotw.com/2/itertools/
基本是基于文档的翻译和补充,相当于翻译了
itertools用于高效循环的迭代函数集合
组成
总体,整体了解
无限迭代器
迭代器 参数 结果 例子 count() start,[step] start,start+step,start+2*step,... count(10)-->1011121314... cycle() p p0,p1,...plast,p0,p1,... cycle('ABCD')-->ABCDABCD... repeat() elem[,n] elem,elem,elem,...endlesslyoruptontimes repeat(10,3)-->101010
处理输入序列迭代器
迭代器 参数 结果 例子 chain() p,q,... p0,p1,...plast,q0,q1,... chain('ABC','DEF')-->ABCDEF compress() data,selectors (d[0]ifs[0]),(d[1]ifs[1]),... compress('ABCDEF',[1,0,1,0,1,1])-->ACEF dropwhile()pred,seq seq[n],seq[n+1],startingwhenpredfails dropwhile(lambdax:x<5,[1,4,6,4,1])-->641 groupby() iterable[,keyfunc]sub-iteratorsgroupedbyvalueofkeyfunc(v) ifilter() pred,seq elementsofseqwherepred(elem)isTrue ifilter(lambdax:x%2,range(10))-->13579 ifilterfalse() pred,seq elementsofseqwherepred(elem)isFalse ifilterfalse(lambdax:x%2,range(10))-->02468 islice() seq,[start,]stop[,step]elementsfromseq[start:stop:step] islice('ABCDEFG',2,None)-->CDEFG imap() func,p,q,... func(p0,q0),func(p1,q1),... imap(pow,(2,3,10),(5,2,3))-->3291000 starmap() func,seq func(*seq[0]),func(*seq[1]),... starmap(pow,[(2,5),(3,2),(10,3)])-->3291000 tee() it,n it1,it2,...itnsplitsoneiteratorinton takewhile()pred,seq seq[0],seq[1],untilpredfails takewhile(lambdax:x<5,[1,4,6,4,1])-->14 izip() p,q,... (p[0],q[0]),(p[1],q[1]),... izip('ABCD','xy')-->AxBy izip_longest() p,q,... (p[0],q[0]),(p[1],q[1]),... izip_longest('ABCD','xy',fillvalue='-')-->AxByC-D-
组合生成器
迭代器 参数 结果 product() p,q,...[repeat=1] cartesianproduct,equivalenttoanestedfor-loop permutations() p[,r] r-lengthtuples,allpossibleorderings,norepeatedelements combinations() p,r r-lengthtuples,insortedorder,norepeatedelements combinations_with_replacement()p,r r-lengthtuples,insortedorder,withrepeatedelements product('ABCD',repeat=2) AAABACADBABBBCBDCACBCCCDDADBDCDD permutations('ABCD',2) ABACADBABCBDCACBCDDADBDC combinations('ABCD',2) ABACADBCBDCD combinations_with_replacement('ABCD',2) AAABACADBBBCBDCCCDDD
第一部分
itertools.count(start=0,step=1)
创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算(注意:此迭代器不支持长整数)
如果超出了sys.maxint,计数器将溢出并继续从-sys.maxint-1开始计算。
定义
defcount(start=0,step=1): #count(10)-->1011121314... #count(2.5,0.5)->2.53.03.5... n=start whileTrue: yieldn n+=step
等同于(start+step*iforiincount())
使用
fromitertoolsimport*
foriinizip(count(1),['a','b','c']): printi
(1,'a') (2,'b') (3,'c')