itertools 模块,为高效循环提供了许多创建迭代器的函数,较为实用的一个模块

模块内置函数:

1、无穷的迭代器:

count([start, [step]]):从 start(默认 0)开始,以 step(默认1)为步长迭代,用于整数较好,用于浮点数时为了精确可以使用(start + step * i for i in count())
cycle(iterable):迭代 iterable,同时复制每个值,iterable 迭代完后,无限循环复制的值。结果就是无限循环 iterable
repeat(object[, times]):重复 object 指定次数,没有指定则无限循环,与 cycle 不同之处在于它重复的是整体,而 cycle 会将每个元素单独输出

无穷迭代器通常搭配 imap() 生成连续数据或 izip() 添加序列数

2、生成排列组合的生成器:

product(*iterables[, repeat]):从每个 iterables 中挑选 1 个元素总共 repeat 组,进行排列(有顺序),算自身和自身的排列
permutations(iterable, r):从 iterable 中挑选 r 个进行排列(有顺序),不算自身和自身的排列
combinations(iterable, r):从 iterable 中挑选 r 个进行组合(无顺序),不算自身和自身的组合
combinations_with_replacement(iterable, r):从 iterable 中挑选 r 个进行组合(无顺序),算自身和自身的组合

3、其余的迭代器:

3.1、连接多个迭代器

chain(*iterables):把所有 iterables 组合到一个中,返回新的迭代器。类方法:chain.from_iterable(iterable):具体什么意思没搞懂,说不清楚

3.2、从一个迭代器中挑选所需要的东西

compress(data, selectors):从 data 中挑选出对应位置 selectors 返回 True 的元素,其中一个迭代完了就停止
dropwhile(predicate, iterable):弃掉 predicate 第一次不为真的之前的所有元素
takewhile(predicate, iterable):弃掉 predicate 第一次不为真的之后的所有元素
ifilter(predicate, iterable):从 iterable 中选出 predicate 为真的元素,创建一个新的迭代器,若 predicate 为 None,就返回 iterable 中为真的元素
ifilterfalse(predicate, iterable):从 iterable 中选出 predicate 为假的元素,创建一个新的迭代器,若 predicate 为 None,就返回 iterable 中为假的元素
islice(iterable, stop):从 iterable 中选出第一个至 stop 为止(包括stop)的元素,创建一个新的迭代器
islice(iterable, start, stop[, step]):从 iterable 中选出 start(不包括start)至 stop 为止(包括stop)的元素,创建一个新的迭代器

3.3、计算各个迭代器的函数计算结果

imap(function, *iterables):迭代每个 iterable 中的元素,作为 function 的参数计算结果,只要其中一个 iterable 迭代完了就停止,如果 function 为 None,就返回元组
starmap(function, iterable):用于计算的元素已经被事先以 tuple 形式组合在一个 iterable 中的情况,相当于 function(a,b) 和 function(*c) 的区别
izip(*iterables):迭代每个 iterable 中的元素,将其组合到一起作为一个新元素,只要其中一个 iterable 迭代完了就停止
izip_longest(*iterables[, fillvalue]):迭代每个 iterable 中的元素,将其组合到一起作为一个新元素,短的 iterable 迭代完了,就用 fillvalue 代替
groupby(iterable[, key]):key 是计算 iterable 中每个元素结果的函数,计算结果相同的为一组,返回结果为一个二元元组,第一个元素是计算结果,第二个元素是保存了原数据的迭代器。元素产生相同结果但是没有连续则算两个结果。
[k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
[list(g) for k, g in groupby('AAAABBBCCDAABBB')] --> AAAA BBB CC D AA BBB

3.4、复制一个迭代器(像细胞分裂)

tee(iterable[, n=2]):把一个 iterable 分裂成 n 个相同迭代器,完成 tee 操作后,原迭代器不能再使用