python模块 itertools
itertools
我们知道,迭代器的特点是:惰性求值(Lazy evaluation),即只有当迭代至某个值时,它才会被计算,这个特点使得迭代器特别适合于遍历大文件或无限集合等,因为我们不用一次性将它们存储在内存中。
Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next()
来取值。
itertools 模块提供的迭代器函数有以下几种类型:
- 无限迭代器:生成一个无限序列,比如自然数序列
1, 2, 3, 4, ...
; - 有限迭代器:接收一个或多个序列(sequence)作为参数,进行组合、分组和过滤等;
- 组合生成器:序列的排列、组合,求序列的笛卡儿积等;
无限迭代器
itertools 模块提供了三个函数(事实上,它们是类)用于生成一个无限序列迭代器:
count(startl=0, step=1)
创建一个从 start (默认值为 0) 开始,以 step (默认值为 1) 为步长的的无限整数迭代器
cycle(iterable)
对 iterable 中的元素反复执行循环,返回迭代器
repeat(object [,n]
反复生成 object,如果给定 n,则重复次数为 n,否则为无限
Iterator | Arguments | Results | Example |
---|---|---|---|
| start, [step] | start, start+step, start+2*step, … |
|
| p | p0, p1, … plast, p0, p1, … |
|
| elem [,n] | elem, elem, elem, … endlessly or up to n times |
|
有限迭代器
itertools 模块提供了多个函数(类),接收一个或多个迭代对象作为参数,对它们进行组合、分组和过滤等:
Iterator | Arguments | Results | Example |
chain() | p, q, … | p0, p1, … plast, q0, q1, … | chain(‘ABC‘, ‘DEF‘) --> A B CD E F |
iterable | p0, p1, … plast, q0, q1, … | chain.from_iterable([‘ABC‘,‘DEF‘]) --> A B C D E F | |
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 |
takewhile() | pred, seq | seq[0], seq[1], until pred fails | takewhile(lambda x: x<5,[1,4,6,4,1]) --> 1 4 |
tee() | it, n | it1, it2, … itn splits one iterator into n |