说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
itertools 模块实现一系列 iterator ,这些迭代器受到 APL,Haskell 和 SML 的启发。为了适用于 Python,它们都被重新写过。本模块标准化了一个快速、高效利用内存的核心工具集,这些工具本身或组合都很有用。它们一起形成了“迭代器代数”,这使得在纯 Python 中有可能创建简洁又高效的专用工具。注意,这些迭代生成器生成的可迭代对象正如可迭代对象的特点,迭代后就会为空。
这些内置工具同时也能很好地与 operator 模块中的高效函数配合使用。例如,我们可以将两个向量的点积映射到乘法运算符: sum(map(operator.mul, vector1, vector2)) 。
示例代码 | 示例结果 |
---|---|
count(10, 2) |
10, 12, 14, 16, 18, ... |
cycle(['A', 'B', 'C']) |
A, B, C, A, B, C, A, B, ... |
repeat(10, 3) |
10, 10, 10 |
示例代码 | 示例结果 |
---|---|
accumulate([1, 2, 3, 4], lambda x, y: x + y) |
1, 3, 6, 10 |
chain('ABC', 'DEF') |
A, B, C, D, E, F |
chain.from_iterable(['ABC', 'DEF']) |
A, B, C, D, E, F |
compress('ABCDEF', [1, 0, 1, 0, 1, 0]) |
A, C, E |
dropwhile(lambda x: x < 5, [1, 4, 6, 4, 1]) |
6, 4, 1 |
filterfalse(lambda x: x % 2, range(10)) |
0, 2, 4, 6, 8 |
groupby('AAAABBBCCDAABBB') |
(A, AAAA), (B, BBB), (C, CC), (D, D), ... |
islice('ABCDEFG', 2, None) |
C, D, E, F, G |
pairwise('ABCDEFG') |
AB BC CD DE EF FG |
starmap(pow, [(2, 5), (3, 2), (10, 3)]) |
32, 9, 1000 |
takewhile(lambda x: x < 5, [1, 4, 6, 4, 1]) |
1, 4 |
tee('ABC', 3) |
(A, A, A), (B, B, B), (C, C, C) |
zip_longest('ABCD', 'xy', fillvalue='-') |
(A, x), (B, y), (C, -), (D, -) |
示例代码 | 示例结果 |
---|---|
product('AB', '12') |
(A, 1), (A, 2), (B, 1), (B, 2) |
permutations('ABCD', 2) |
(A, B), (A, C), (A, D), (B, A), ... |
combinations('ABCD', 2) |
(A, B), (A, C), (A, D), (B, C), (B, D),... |
combinations_with_replacement('AB', 2) |
(A, A), (A, B), (B, B) |
除了以上内置的功能,还可以使用 Python Package Index 上的 more-itertools 第三方,它提供更加丰富的迭代功能,安装:
pip install more-itertools
扩展的工具提供了与底层工具集相同的高性能。保持了超棒的内存利用率,因为一次只处理一个元素,而不是将整个可迭代对象加载到内存。代码量保持得很小,以函数式风格将这些工具连接在一起,有助于消除临时变量。速度依然很快,因为倾向于使用“矢量化”构件来取代解释器开销大的 for 循环和 generator 。
参考:
更新时间:2024-07-04 09:21:32 标签:python 标准库 迭代器 函数