itertools 模块包含了一些创建有效迭代器的函数, 对数据进行循环操作, 可以与for循环语句,及生成器联合使用。
import itertools
1. chain(iter1, iter2, iter3...itern)
函数功能是将一组迭代器链接起来生成一个新的迭代器, 生成项根据参数的顺序依次生成。
示例:
new_iter = itertools.chain([1,2,3,4], [5,6,7,8])
for i in new_iter:
print i,
输出:1 2 3 4 5 6 7 8
2.combination(iterable, r)
创建一个迭代器, 返回iterable中所有长度为r的子序列, 返回的子序列中的项以iterable中的顺序排序(类似数学中的组合):
示例:
from itertools import combination
new_iter = combination(['a', 'b', 'c'], 2)
for i in new_iter:
print i,
输出:('a', 'b'), ('a', 'c'), ('b', 'c')
3.groupby(iterable, [,keyfuc])
对迭代器(满足条件的进行分组), 如果唔keyfuc参数则对每一项进行分组.
示例:
for i in itertools.groupby([1,2,3,4,5], lambda x: x<5):
print i
for j in i[1]:
print j,
输出:(True, <itertools._groupby object atd 0x2bb97d0>)
1 2 3 4
4.ifilter(predicate, iterable):
创建一个新的迭代器, 仅生成iterable中predicate(item)为True的项, 如果predicate为None, 则返回iterable中所有为True的项。
5.ifilterfalse(predicate, iterable) 与上述的ifilter相反。
6.imap(fun(or NOne), iter1, iter2, ..iterN)
创建一个新的迭代器, 生成项fun(i1, i2, i3...iN)参数分别来自迭代器i1,i2,i3..iN, 如果func为None, 则返回(i1,i2,,iN)形式的元组(相当于内置函数zip的功能)。
示例:
p = itertools.imap(pow, (2,3,10), (5,2,3))
for i in p:
print i,
输出:32 9 1000
p = imap(None, [1,2,3], [4,5,6])
for i in p:print i,
输出:(1, 4) (2, 5), (3, 6)
p = imap(zip, [[1,2,3]], [['a', 'b', 'c']])
for i in p:print i,
输出:(1, 'a') ('2', 'b') ('3', 'c')
7.islice(iterable, [start, ], stop, [,step])
def islice(iterable, *args):
#islice('abcdef', 2) ——> a b
#islice('abcdef', 2, 4) ——>c d
#islice('abcdef', 2, None) ——> c d e f
#islice('abcdef', 0, None, 2) ——>a c e
s = slice(*args)
it=iter(xrange(s.start or 0, s.stop or sys.maxint, s.step or 1))
nextit = next(it)
for i, element in enumerate(iterable):
if i == nextit:
yield element
nextit = next(it)
8.izip(iter1, iter2, iter3..iterN)
创建一个新的迭代器, 此函数生成的值与内置的zip()函数相同
def izip(*iterables):
iterables = map(iter, *iterables)
while iterables:
yield tuple(map(next, iterables))
9.permutations(iterable, [,r])
创建一个迭代器, 返回iterable中所有长度为r的项目序列, 如果省略了r,那么序列的长度与iterable中的项目数量相同。(排列功能)
itertools.permutations('abc') ——> ab ac ba bc ca cb
记录学些的点点滴滴-青石