【Python 进阶】Itertools

前言

Itertools 模块提供了一系列迭代器操作函数,能让你的代码变得简洁高效和 pythonic。本文为 https://docs.python.org/zh-cn... 的阅读笔记,官方文档已经写得很好了,但排版实在是看不习惯,就搬砖再加上自己的理解放到此笔记中。

注意:
1. 说明中 "XX器" 是为了加强记忆瞎起的名字  
2. 懒得看说明的可以直接看示例 : )

无限迭代器

函数 说明 实参 结果 示例
count() 步长器 - 创建一个迭代器,它从 start 值开始,返回均匀 step 的值 start, [step] start, start+step, start+2*step, .... count(10) => 10 11 12 13 14 ...
cycle() 循环器 - 创建一个迭代器,循环返回 iterable 中所有元素并保存一个副本 p p0, p1, p2, .... plast, p0, p1, p0 cycle('ABCD') => A B C D A B C D ...
repeat() 重复器 - 创建一个迭代器,返回 n 次传入的 object 对象 elem, [, n] elem, elem, 重复n次 repeat(10, 3) => 10 10 10 ...

迭代器以最短的输入序列终止

函数 说明 实参 结果 示例
accumulate() 累加器 - 创建一个迭代器,返回相加总值或其他双目运算函数的累积结果值(通过可选的 func 参数指定) p [,func] p0, p0+p1, p0+p1+p2, ... accumulate([1,2,3,4,5]) => 1 3 6 10 15
chain() 连接器 - 创建一个迭代器,连接两个迭代器的元素并逐一返回 p, q, ... p0, p1, ... plast, q0, q1, ... chain('ABC', 'DEF') => A B C D E F
chain.from_iterable() 连接器 - 创建一个迭代器,连接迭代器元素并逐一返回 iterable p0, p1, ... plast, q0, q1, ... chain.from_iterable(['ABC', 'DEF']) => A B C D E F
compress() 对照过滤器 - 创建一个迭代器,它返回 data 中经 selectors 真值测试为 True 的元素 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() 真值截断器 - 创建一个迭代器,如果 predicatetrue,迭代器丢弃这些元素,然后返回剩下的其他元素 pred, seq seq[n], seq[n+1], ... 从pred首次真值测试失败开始 dropwhile(lambda x: x<5, [1,4,6,4,1]) => 6 4 1
filterfalse() 条件过滤器 - 创建一个迭代器,只返回 iterablepredicateFalse的元素 pred, seq seq中pred(x)为假值的元素,x是seq中的元素。 filterfalse(lambda x: x%2, range(10)) => 0 2 4 6 8
groupby() 分组器 - 创建一个迭代器,返回 iterable 中连续的键和组 iterable[, key] 根据 key(v)值分组的迭代器 [k for k, g in groupby('AAAABBBCCDAABBB')] => A B C D A B
islice() 切片器 - 创建一个迭代器,返回从 iterable 里选中的元素序列 seq, [start,] stop [, step] seq[start:stop:step]中的元素 islice('ABCDEFG', 2, None) => C D E F G
starmap() 函数执行器 - 创建一个迭代器,使用从可迭代对象中获取的参数来计算该函数。 func, seq func(seq[0]), func(seq[1]), ... starmap(pow, [(2,5), (3,2), (10,3)]) => 32 9 1000
takewhile() 假值截断器 - 创建一个迭代器,只要 predicate 为真就从可迭代对象中返回元素 pred, seq seq[0], seq[1], ..., 直到pred真值测试失败 takewhile(lambda x: x<5, [1,4,6,4,1]) => 1 4
tee() 拆解器 - 从一个可迭代对象中返回 n 个独立的迭代器。 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() 笛卡尔积生成器 - 返回输入的 iterable 的笛卡儿积 p, q, ... [repeat=1] 笛卡尔积,相当于嵌套的for循环 product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
permutations() 元素排列器 - 连续返回由 iterable 元素生成长度为 r 的排列 p[, r] 长度r元组,所有可能的排列,无重复元素 permutations('ABCD', 2) => AB AC AD BA BC BD CA CB CD DA DB DC
combinations() 元素组合器 - 返回由输入 iterable 中元素生成的长度为 r 的组合 p, r 长度r元组,有序,无重复元素 combinations('ABCD', 2) => AB AC AD BC BD CD
combinations_with_replacement() 元素组合器 - 返回由输入 iterable 中元素生成的长度为 r 的组合,允许每个元素可重复出现。 p, r 长度r元组,有序,元素可重复 combinations_with_replacement('ABC', 2) => AA AB AC BB BC CC

参考

https://docs.python.org/zh-cn...

你可能感兴趣的:(python,迭代器)