itertools ---- Python Iteration Module
文章目录
无限 迭代器
count(start, step)
起点开始,无穷迭代, 每次返回值(yield)增加给定 step
1 2itertools.count(1) itertools.count(1, 3)
cycle(iterable)
提供的材料,被无穷迭代
1 2itertools.cycle([1, 2, 3]) itertools.cycle('ABC')
repeat(object, times_count)
给定元素,被迭代 N 次
1repeat(10, 3) --> 10 10 10
有限次迭代
accumulate(iterable, [func, *, initial=None])
- 分步运算,迭代器
相当于 reduce, 返回每一步的运行结果
1itertools.accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
chain(iterableA, iterableB, …)
- 迭代器 – 连接器
把 输入的多个 Iterable 连接起来
1chain('ABC', 'DEF') --> A B C D E F
chain.chain_from_iterable(iterable)
- 迭代器 – 连接器
相当于 使用 列表先手动组合多个 Iterable
1 2chain('ABC', 'DEF') --> A B C D E F <---> chain.from_iterable(['ABC', 'DEF'])
compress(data, selectors)
- 元素提取器
用第二个列表中给定的 indexes, 从第一个列表中提取元素
1compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F
dropwhile(predicate, sequence) —> 与 takewhile 相反
- 保留结尾
无效开始触发,迭代器
- 从第一个无效的元素,开始连续返回(后面的不再判断)
- 这个无效的也留下
| |
takewhile(predicate, sequence) —> 与 dropwhile 相反
- 保留开头
无效中止,迭代器
- 第一个无效的开始,都不要了(后面的全不要)
- 这个无效的也不要了
| |
filterfalse(prdicate, sequence)
- filter 函数的 相反工具
groupby(sequence, key=your_keyfun)
- 参考:https://docs.python.org/3/library/itertools.html#itertools.groupby
- 分组器
把元素分组,返回类似 dict 的 object
- unique element –> key
- 各个 元素 —> value (iterable)
效果举例:
| |
islice
- 元素切片器
名称意思
- islice –> index slice
- 使用类似 range(start, stop, step) 生成的 index 对 iterable 切片
用法
- islice(iterable, stop)
islice(iterable, start, stop[, step])
1islice('ABCDEFG', 0, None, 2) --> A C E GNone 含意
- start –> None –> 0
- stop —> None –> -1
starmap(func, sequence)
map, 嵌套使用模式
map 的 func(* elem) 形式
- map(func, sequenceA, sequenceB)
func = lambda x, y: …
1starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
tee(iterable, N)
类似 itertools.repeat(elem, N)
- https://docs.python.org/3/library/itertools.html#itertools.tee
区别
repeat
- 把 elem 保持不变
- –> iterable(elem, elem, …)
tee
- 把 elem 也转换成了 iterable
- –> iterable(iterable_elem, iterable_elem, …)
- 就是简单的把 iterable 当成一个整体,重复 N 次
zip_longest(*iterables, fillvalue=None)
zip() 函数的优化
- 在原始 zip() 中,当两个操作 iterable 不等长时,会失败
这里使用 fillvalue 进行填充 较短的那个
1zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
排列组合
product()
- 笛卡儿积 组合
permutations()
- 排列
combinations()
组合
无放回的组合
1 2 3combinations('ABCD', 2) AB AC AD BC BD CD
combinations_with_replacement()
组合
有放回的组合
1 2 3combinations_with_replacement('ABCD', 2) AA AB AC AD BB BC BD CC CD DD注意
- 可以看出,这里会出现重复元素的组合
文章作者
上次更新 2024-07-16 (7f33ae8)