itertools模块总结
python官方library中有一个itertools模块,官方是这么介绍的:
1  | itertools — Functions creating iterators for efficient looping  | 
所以,itertools模块是一个创建快速、高效迭代器的模块。
分类:
- 无限型(Infinite Iterators)
 - 终止于最短输入序列的迭代器(Iterators terminating on the shortest input sequence)
 - 组合生成器 (Combinatoric generators)
 
无限迭代器
count(start, step)
- 起始参数(start)默认值为0
 - 步长(step)默认值为1
 - 作用: 返回以start开头的均匀间隔step步长的值
 
1  | from itertools import count  | 
结果打印输出:1 11 21 31 41 51 61 71 81 91 101 111 121 131 141
如果没有截止条件,理论上会一直打印下去。
cycle(iterable)
- iterable 为可迭代对象
 - 作用:保存迭代对象的每个元素的副本,无限的重复返回每个元素的副本
 
1  | from itertools import cycle  | 
结果打印输出:a b c d e f a b c d e……
repeat(elem[, times])
- elem为述字符串,数字等对象
 - times为迭代次数,默认为无限次
 - 作用:按照指定的迭代次数times重复返回elem,如果不指定times,则为无限次
 
1  | from itertools import repeat  | 
结果打印输出:abcdef abcdef abcdef abcdef
终止于最短输入序列的迭代器
accumulate(seq[,func])
- seq为可迭代对象
 - func为累积执行的函数(默认为
operator.add) 
1  | from itertools import accumulate  | 
结果打印输出:1 2 6 24 120
1  | def accumulate(iterable, func=operator.add):  | 
chain(*iterables)
- *iterables为一个或多个可迭代序列
 - 作用:返回所有可迭代序列
 
1  | from itertools import chain  | 
结果打印输出:a b c d e f 1 2 3
compress(data, selectors)
- data为数据对象
 - selectors为选择器(规则)
 - 作用:返回数据对象中对应规则为True的元素
 
1  | from itertools import compress  | 
结果打印输出:a c d
dropwhile(pred,seq)
- pred为判断谓词
 - seq为可迭代序列
 - 作用:当pred为false时开始迭代
 
1  | from itertools import dropwhile  | 
结果打印输出:6 4 1
takewhile(pred,seq)
- pred为判断谓词
 - seq为可迭代对象
 - 作用:当pred为false时停止迭代
 
1  | from itertools import takewhile  | 
结果打印输出:1 4
filterfalse(pred,seq)
- pred为判断谓词
 - seq为可迭代对象
 - 作用:当pred为false时迭代
 
1  | #与filter相反  | 
结果打印输出:0 2 4 6 8
groupby(iterable[, key])
- iterable为可迭代对象
 - key分组的键值
 - 作用:创建一个迭代器,对iterable生成的连续项进行分组,在分组过程中会查找重复项。如果iterable在多次连续迭代中生成了同一项,则会定义一个组,如果将此函数应用一个分类列表,那么分组将定义该列表中的所有唯一项,key(如果已提供)是一个函数,应用于每一项,如果此函数存在返回值,该值将用于后续项而不是该项本身进行比较,此函数返回的迭代器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。
 - 注意:当每次key函数返回的值变化时就产生一个新分组或break,所以需要先用key函数对对象进行排序。
 
1  | from itertools import groupby  | 
结果打印输出:
1  | middle  | 
1  | from itertools import islice,groupby  | 
结果打印输出:
1  | A ['A', 'A', 'A', 'A']  | 
islice(iterable, stop) / islice(iterable, start, stop[, step ])
- iterable为可迭代对象
 - start、stop、step分别为起始位置、终止位置、和步长
 - 作用:创建一个迭代器,生成项的方式类似于切片返回值: iterable[start : stop : step],将跳过前start个项,迭代在stop所指定的位置停止,step指定用于跳过项的步幅。与切片不同,负值不会用于任何start,stop和step,如果省略了start,迭代将从0开始,如果省略了step,步幅将采用1.
 
1  | from itertools import islice  | 
starmap(func, seq)
- func:计算函数
 - seq:需传递的参数
 - 作用:创建一个迭代器,生成值
func(*item),其中item来自iterable,只有当iterable生成的项适用于这种调用函数的方式时,此函数才有效。 - 注意:与
map()与starmap()的区别类似与function(a,b)和function(*c) 
1  | from itertools import starmap  | 
结果打印输出:8 9 64
tee(iterable, n=2)
- iterable为可迭代对象
 - n为需要的个数
 - 作用:从iterable创建n个独立的迭代器,创建的迭代器以n元组的形式返回,n的默认值为2,此函数适用于任何可迭代的对象,但是,为了克隆原始迭代器,生成的项会被缓存,并在所有新创建的迭代器中使用,一定要注意,不要在调用tee()之后使用原始迭代器iterable,否则缓存机制可能无法正确工作。
 
1  | from itertools import tee  | 
结果打印输出:
1  | ['1', '2', '3', '4', '5', '6', '7', '8', '9']  | 
zip_longest(iter1,iter2, …)
- iter1,iter2等为可迭代对象
 - 作用:与zip()相同,但是迭代过程会持续到所有输入迭代变量iter1,iter2等都耗尽为止,如果没有使用fillvalue关键字参数指定不同的值,则使用None来填充已经使用的迭代变量的值。
 
1  | from itertools import zip_longest  | 
结果打印输出:[(‘a’, ‘1’), (‘b’, ‘2’), (‘c’, ‘-‘), (‘d’, ‘-‘)]
组合生成器
product(iter1,iter2, … [repeat=1])
- iter1,iter2等为可迭代对象
 - repeat是一个关键字参数,指定重复生成序列的次数
 - 作用:创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组
 
1  | from itertools import product  | 
结果打印输出:(‘a’, ‘1’) (‘a’, ‘2’) (‘b’, ‘1’) (‘b’, ‘2’) (‘c’, ‘1’) (‘c’, ‘2’) (‘d’, ‘1’) (‘d’, ‘2’)
permutations(iterable [,r]):
- iterable 为可迭代对象
 - r为长度
 - 作用:创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省略了r,那么序列的长度与iterable中的项目数量相同
 
1  | from itertools import permutations  | 
结果打印输出:(‘a’, ‘b’) (‘a’, ‘c’) (‘a’, ‘d’) (‘b’, ‘a’) (‘b’, ‘c’) (‘b’, ‘d’) (‘c’, ‘a’) (‘c’, ‘b’) (‘c’, ‘d’) (‘d’, ‘a’) (‘d’, ‘b’) (‘d’, ‘c’)
combinations(iterable, r)
- iterable 为可迭代对象
 - r为长度
 - 作用:创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序,元素不能重复出现
 
1  | from itertools import combinations  | 
结果打印输出:(‘a’, ‘b’) (‘a’, ‘c’) (‘a’, ‘d’) (‘b’, ‘c’) (‘b’, ‘d’) (‘c’, ‘d’)
combinations_with_replacement(iterable, r)
- iterable 为可迭代对象
 - r为长度
 - 作用:创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序,元素可以重复出现
 
1  | from itertools import combinations_with_replacement  | 
结果打印输出:(‘a’, ‘a’) (‘a’, ‘b’) (‘a’, ‘c’) (‘a’, ‘d’) (‘b’, ‘b’) (‘b’, ‘c’) (‘b’, ‘d’) (‘c’, ‘c’) (‘c’, ‘d’) (‘d’, ‘d’)