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的组合