Python 内置模块itertools的使用

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)