模块-itertools模块迭代器函数
itertools模块基本介绍
- Python的内建模块
itertools提供了非常有用的用于操作迭代对象的函数。 itertools包含特殊用途的迭代器函数。- 在
for .. in循环中调用迭代函数,每次返回一项,并记住当前调用的状态。
itertools的帮助信息:
| |
itertools模块无限迭代器
itertools.count(start=0, step=1)返回从start开始,步长为step的迭代器,如果不手动终止,会无限迭代。我们可以在循环中增加判断条件或按Ctrl+C终止程序。
示例:
| |
itertools.cycle(p)循环可迭代对象p中的子对象。
示例:
| |
itertools.repeat(elem [,n])重复elem元素n次,如果不指定n则无限循环。
示例:
| |
itertools模块输入序列迭代器
itertools.accumulate(p[, func]) --> p0, p0+p1, p0+p1+p2返回序列组合后的值。- 可以指定函数
func,则按func函数进行迭代。
示例:
| |
itertools.chain(p, q, ...) --> p0, p1, ... plast, q0, q1, ...将多个迭代器作为参数,将这多个迭代器链接在一起,返回单个迭代器。
示例:
| |
itertools.chain.form_iterable([p, q, ...]) --> p0, p1, ... plast, q0, q1, ...只接受一个参数,并将参数作为迭代器进行迭代。
示例:
| |
itertools.compress(data, selectors) --> (d[0] if s[0]), (d[1] if s[1]), ... compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F,选择器,对原始数据data进行筛选,选择器selectors中元素为False时不选择,True时选择。
示例:
| |
itertools.dropwhile(pred, seq) --> seq[n], seq[n+1], starting when pred fails dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1,删除满足条件的元素,直到条件pred为False时,返回后续所有元素的迭代器。
示例:
| |
itertools.groupby(iterable[, keyfunc]) --> sub-iterators grouped by value of keyfunc(v)返回一个按照keyfunc(v)进行分组后的值集合的子迭代器。如果iterable在多次连接迭代中产生同一项,则会定义一个组。keyfunc是计算的关键,如果未指定keyfunc则返回值与迭代元素值相同。如果定义了keyfunc,则需要对每个迭代元素执行keyfunc后的结果进行分组处理(每个分组是一个子迭代器),最后返回的迭代器的元素是(key,group),如果要显示最后的group值,需要使用list(group)将组迭代器存储在字典中。
示例:
| |
itertools.islice(seq, [start,] stop [, step]) --> elements from seq[start:stop:step]返回序列seq的从start开始到stop结束的步长为step的元素的迭代器,如果不指定start和step,则第二个参数是stop。
示例:
| |
itertools.starmap(fun, seq) --> fun(*seq[0]), fun(*seq[1]), itertools.starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000返回执行fun(elem)后的迭代器。
示例:
| |
itertools.tee(it, n=2) --> (it1, it2 , ... itn) splits one iterator into n- 返回基于原始输入的n个独立迭代器的元组。为了克隆原始迭代器,生成的项会被缓存,分割成n个独立迭代器后,原先的迭代器就不要再使用,否则缓存机制可能无法正确工作。
- 使用
list()函数比tee()函数快。
示例:
| |
itertools.takewhile(pred, seq) --> seq[0], seq[1], until pred failsitertools.takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4- 保留序列元素直到条件不满足。与
dropwhile相反。
示例:
| |
itertools.zip_longest(p, q, ...) --> (p[0], q[0]), (p[1], q[1]), ...- 创建一个聚合来自每个迭代的元素的迭代器。 如果迭代的长度不均匀,则使用
fillvalue填充缺失值。 迭代继续,直到最长的可迭代用尽。
示例:
| |
itertools模块组合迭代器
itertools.product(p, q, ... [repeat=1]) --> cartesian product生成笛卡尔积的元组。
示例:
| |
-itertools.permutations(p[, r]) 创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省略了r,那么序列的长度与iterable中的项目数量相同: 返回p中任意取r个元素做排列的元组的迭代器。
示例:
| |
itertools.combinations(p, r)创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序 (不带重复)。
示例:
| |
itertools.combinations_with_replacement(p, r)创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序 (带重复)
示例:
| |
参考文献
