您的位置:首页 > 编程语言 > Python开发

Python 内置模块itertools的使用

2017-04-10 16:49 691 查看
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的组合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python itertools