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)
|