python中的itertools模块
Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next()
来取值。
itertools 模块提供的迭代器函数有以下几种类型:
- 无限迭代器:生成一个无限序列,比如自然数序列
1, 2, 3, 4, ...
; - 有限迭代器:接收一个或多个序列(sequence)作为参数,进行组合、分组和过滤等;
- 组合生成器:序列的排列、组合,求序列的笛卡儿积等。
无限迭代器
itertools 模块提供了三个函数(事实上,它们是类)用于生成一个无限序列迭代器:
-
count(firstval=0, step=1)
创建一个从 firstval (默认值为 0) 开始,以 step (默认值为 1) 为步长的的无限整数迭代器
-
cycle(iterable)
对 iterable 中的元素反复执行循环,返回迭代器
-
repeat(object [,times]
反复生成 object,如果给定 times,则重复次数为 times,否则为无限
组合生成器
itertools 模块还提供了多个组合生成器函数,用于求序列的排列、组合等:
- product
- permutations
- combinations
- combinations_with_replacement
product
product
用于求多个可迭代对象的组合,它跟嵌套的 for 循环等价。它的一般使用形式如下:
product(iter1, iter2, ... iterN, [repeat=1])
for item in itertools.product('abcd', 'xyz'): print(item)
输出为:
('a', 'x')
('a', 'y')
('a', 'z')
('b', 'x')
('b', 'y')
('b', 'z')
('c', 'x')
('c', 'y')
('c', 'z')
('d', 'x')
('d', 'y')
('d', 'z')
permutations
permutations
用于生成一个排列,它的一般使用形式如下:
permutations(iterable[, r])
其中,r 指定生成排列的元素的长度,如果不指定,则默认为可迭代对象的元素长度。
list(permutations('ABC'))
结果为:
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
list(permutations('ABC', 2))
结果为:[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
combinations
combinations
用于求序列的组合,它的使用形式如下:
combinations(iterable, r)
list(combinations('ABC', 2))
结果为:[('A', 'B'), ('A', 'C'), ('B', 'C')]
itertools 模块提供了很多用于产生多种类型迭代器的函数,它们的返回值不是 list,而是迭代器。