本模块实现一系列 iterator ,这些迭代器受到APL,Haskell和SML的启发。为了适用于Python,它们都被重新写过。
本模块标准化了一个快速、高效利用内存的核心工具集,这些工具本身或组合都很有用。它们一起形成了“迭代器代数”,这使得在纯Python中有可能创建简洁又高效的专用工具。
例如,SML有一个制表工具: tabulate(f)
,它可产生一个序列 f(0), f(1), ...
。在Python中可以组合 map()
和 count()
实现: map(f, count())
。
这些内置工具同时也能很好地与 operator
模块中的高效函数配合使用。例如,我们可以将两个向量的点积映射到乘法运算符: sum(map(operator.mul, vector1, vector2))
。
迭代器 | 实参 | 结果 | 示例 |
---|---|---|---|
count() |
start, [step] | start, start+step, start+2*step, ... | count(10) --> 10 11 12 13 14... |
cycle() |
p | p0, p1, ... plast, p0, p1, ... | cycle('ABCD') --> A B C D A B CD ... |
repeat() |
elem [,n] | elem, elem, elem, ... 重复无限次或n次 | repeat(10, 3) --> 10 10 10 |
迭代器 | 实参 | 结果 | 示例 |
---|---|---|---|
accumulate() |
p [,func] | p0, p0+p1, p0+p1+p2, ... | accumulate([1,2,3,4,5]) --> 1 3 610 15 |
chain() |
p, q, ... | p0, p1, ... plast, q0, q1, ... | chain('ABC', 'DEF') --> A B C D EF |
chain.from_iterable() |
iterable | p0, p1, ... plast, q0, q1, ... | chain.from_iterable(['ABC','DEF']) --> A B C D E F |
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 |
dropwhile() |
pred, seq | seq[n], seq[n+1], ... 从pred首次真值测试失败开始 | dropwhile(lambda x: x<5,[1,4,6,4,1]) --> 6 4 1 |
filterfalse() |
pred, seq | seq中pred(x)为假值的元素,x是seq中的元素。 | filterfalse(lambda x: x%2,range(10)) --> 0 2 4 6 8 |
groupby() |
iterable[, key] | 根据key(v)值分组的迭代器 | |
islice() |
seq, [start,] stop [, step] | seq[start:stop:step]中的元素 | islice('ABCDEFG', 2, None) --> CD E F G |
starmap() |
func, seq | func(*seq[0]), func(*seq[1]), ... | starmap(pow, [(2,5), (3,2),(10,3)]) --> 32 9 1000 |
takewhile() |
pred, seq | seq[0], seq[1], ..., 直到pred真值测试失败 | takewhile(lambda x: x<5,[1,4,6,4,1]) --> 1 4 |
tee() |
it, n | it1, it2, ... itn 将一个迭代器拆分为n个迭代器 | |
zip_longest() |
p, q, ... | (p[0], q[0]), (p[1], q[1]), ... | zip_longest('ABCD', 'xy',fillvalue='-') --> Ax By C- D- |
迭代器 | 实参 | 结果 |
---|---|---|
product() |
p, q, ... [repeat=1] | 笛卡尔积,相当于嵌套的for循环 |
permutations() |
p[, r] | 长度r元组,所有可能的排列,无重复元素 |
combinations() |
p, r | 长度r元组,有序,无重复元素 |
combinations_with_replacement() |
p, r | 长度r元组,有序,元素可重复 |
product('ABCD', repeat=2) |
AA AB AC AD BA BB BC BD CA CB CC CD DA DB DCDD |
|
permutations('ABCD', 2) |
AB AC AD BA BC BD CA CB CD DA DB DC |
|
combinations('ABCD', 2) |
AB AC AD BC BD CD |
|
combinations_with_replacement('ABCD',2) |
AA AB AC AD BB BC BD CC CD DD |