Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数,返回的是迭代器对象(实现__next__函数的类)。
1、itertools提供的几个“无限”迭代器:
(1)、count函数
import itertools natuals = itertools.count(1) for n in natuals: print n
count()会创建一个无限的迭代器,所以上述代码会打印出自然数序列,根本停不下来,只能按Ctrl+C退出
i= 0 foritem in itertools.count(100): if i>10: break print item, i = i+1
功能:从100开始数10个数,cout返回一个无界的迭代器,小菜鸟我不会控制了,就引入了一个计数I,让它计数10次。。
输出:100 101 102 103 104105 106 107 108 109 110
(2)、cycle()会把传入的一个序列(字符串也是序列的一种)无限重复下去:
import itertools listone= ['a','b','c'] listtwo= ['11','22','abc'] foritem in itertools.cycle(listone): print item,
打印出a b c a b c a b c ab c a b c a b c a b c a b c a b c...
功能:从列表中取元素,到列表尾后再从头取...
无限循环,因为cycle生成的是一个无界的迭代器
(3)、repeat()负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数:
ns = itertools.repeat('A', 10) for n in ns: print n 打印10次'A' import itertools listone = ['a','b','c'] for item initertools.repeat(listone,3): print item,
2、其他的迭代器操作函数
(1)、chain()可以把一组迭代对象串联起来,形成一个更大的迭代器:
import itertools listone = ['a','b','c'] listtwo = ['11','22','abc'] for item in itertools.chain(listone,listtwo): print item
输出:a b c 11 22 abc
(2)、ifilter的使用
ifilter(fun,iterator)
返回一个可以让fun返回True的迭代器
import itertools listone = ['a','b','c'] listtwo = ['11','22','abc'] def funLargeFive(x): if x > 5: return True . for item initertools.ifilter(funLargeFive,range(-10,10)): print item,
结果:6 7 8 9
(3)、imap的使用
imap(fun,iterator)
返回一个迭代器,对iterator中的每个元素调用fun
import itertools listthree = [1,2,3] def funAddFive(x): return x + 5 for item in itertools.imap(funAddFive,listthree): print item,
返回:6 7 8 对listthree中的元素每个加了5后返回给迭代器
(5)、islice的使用
islice()(seq, [start,] stop [, step])
import itertools listone = ['a','b','c'] listtwo = ['11','22','abc'] listthree = listone + listtwo for item in itertools.islice(listthree,3,5): print item,
功能:返回迭代器,其中的项目来自 将seq,从start开始,到stop结束,以step步长切割后
打印出:11 22
(4)、izip的使用
izip(*iterator) 返回的是元组列表的迭代器对象
import itertools listone = ['a','b','c'] listtwo = ['11','22','abc'] listthree = listone + listtwo for item in itertools.izip(listone,listtwo): print item,
结果:('a', '11') ('b', '22') ('c', 'abc')
功能:返回迭代器,项目是元组,元组来自*iterator的组合