itertools是python中内置的一种高效的生成各种迭代器或者是类的模块,这些函数的返回值为一个迭代器,经常被用在for循环中,当然,也可直接使用next()方法取值,今天就来说说itertools中的常用方法.
itertools按照迭代器的功能可分为三类:
- 无限迭代器: 生成一个无限序列,比如自然数序列 1, 2, 3, 4, …
- 有限迭代器: 接收一个或多个序列(sequence)作为参数,进行组合、分组和过滤等;
- 组合迭代器: 序列的排列、组合,求序列的笛卡儿积等
无限迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
itertools.count(start=0, step=1)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
itertools.cycle(iterable)
|
1 2 3 4 5 6 7 8 9 10 11 12 13
|
itertools.repeat(object[, times])
|
有限迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
itertools.chain(iterable1, iterable2, ...)
|
1 2 3 4 5 6 7 8 9 10 11 12
|
itertools.chain.from_iterable(iterable)
|
1 2 3 4 5 6 7 8 9 10 11 12 13
|
itertools.compress(data, selectors)
|
1 2 3 4 5 6 7 8 9 10
|
itertools.dropwhile(predicate, iterable)
|
1 2 3 4 5 6 7
|
itertools.takewhile(predicate, iterable)
|
1 2 3 4 5 6 7 8 9
|
itertools.ifilter(predicate, iterable)
|
1 2 3 4 5 6 7 8 9
|
itertools.ifilterfalse(predicate, iterable)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
itertools.groupby(iterable[, key])
|
1 2 3 4 5 6 7 8 9 10 11 12
|
itertools.islice(iterable,[start], stop,[step])
|
1 2 3 4 5 6 7 8 9
|
imap(func, iter1, iter2, iter3, ...)
|
1 2 3 4 5 6 7 8 9 10 11 12
|
itertools.izip(*iterables)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
itertools.izip_longest(*iterables,[fillvalue=None])
|
组合迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
itertools.product(*iterables[, repeat])
|
from itertools import product # 迭代器
# test script
for i j in product(range(10),range(10))
print(i,j)
# 同理等于两个for循环嵌套,只是这种写法远行速度遍历会快一些,时间复杂度减小。
for x in range(10):
for y in range(10):
print(x,y)
itertools.permutations(iterable[, r])
1 2 3 4 5 6 7
|
itertools.permutations(iterable[, r])
|
1 2 3 4 5 6 7
|
itertools.combinations(iterable, r)
|
1 2 3 4 5 6 7
|
itertools.combinations_with_replacement(iterable, r)
|