Python 之itertools模块

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
itertools模块主要功能是创建迭代器。

>>> itertools.

itertools.__class__(        itertools.chain(

itertools.__delattr__(      itertools.combinations(

itertools.__dict__          itertools.count(

itertools.__doc__            itertools.cycle(

itertools.__file__          itertools.dropwhile(

itertools.__format__(        itertools.groupby(

itertools.__getattribute__(  itertools.ifilter(

itertools.__hash__(          itertools.ifilterfalse(

itertools.__init__(          itertools.imap(

itertools.__name__          itertools.islice(

itertools.__new__(          itertools.izip(

itertools.__package__        itertools.izip_longest(

itertools.__reduce__(        itertools.permutations(

itertools.__reduce_ex__(    itertools.product(

itertools.__repr__(          itertools.repeat(

itertools.__setattr__(      itertools.starmap(

itertools.__sizeof__(        itertools.takewhile(

itertools.__str__(          itertools.tee(

itertools.__subclasshook__(

1.链接多个迭代器。

itertools.chain(iter1,iter2,…,itern):给出一组迭代器,此函数用来创建一个新的迭代器,来包括所给的迭代器的所有内容。

>>> name

[‘zhu’, ‘jiang’, ‘tao’]

>>> a

[2, 4, 6]

>>> for x in itertools.chain(name,a):

…    print x,

zhu jiang tao 2 4 6

2.双层迭代

itertools.chain.from_iterable(iter) :对迭代器iter中的元素进行迭代,相当于代码:

for  it in iter:

    for x in it:

    yield x

 

>>> for x in itertools.chain.from_iterable(name):

…    print x,

z h u j i a n g t a o

3.创建一个迭代器,返回iterable中所有长度为r的子序列。

>>> for x in itertools.combinations(name,2):

…    print x

(‘zhu’, ‘jiang’)

(‘zhu’, ‘tao’)

(‘jiang’, ‘tao’)

>>> for x in itertools.combinations(a,2):

…    print x,

(2, 4) (2, 6) (4, 6)

4.创建一个迭代器生成从n开始的连续整数

itertools.count(x)

>>> for x in itertools.count():

…    if x < 5:

…        print x

…    else:

…        break

0

1

2

3

4

>>> for x in itertools.count(3):

…    if x <= 10:

…        print x,

…    else:

…        break

3 4 5 6 7 8 9 10

#itertools.count(x) :生成连续的整数,x为开始值。默认为0

5.itertools.cycle(iterable):创建一个迭代器,对iterable元素,反复执行循环操作。

[root@zhu ~]# python zhu.py

[‘cai’, ‘sang’, ‘zi’, ‘cai’, ‘sang’, ‘zi’, ‘cai’, ‘sang’, ‘zi’, ‘cai’, ‘sang’]

[root@zhu ~]# cat zhu.py

#!/usr/bin/python

import itertools

a = []

name  = ‘cai sang zi’

name = name.split()

for x in itertools.cycle(name):

    if len(a) <= 10:

        a.append(x)

    else:

        print a

        break

6.dropwhile(predicate, iterable):创建一个迭代器,只要函数predicate(item)为真,就丢弃iterable中的项,如果predicate(item)为假,就会生成iterable中的项和后续的所有项。

[root@zhu ~]# python zhu.py

zi yue shang liu shao tou

[root@zhu ~]# cat zhu.py

#!/usr/bin/python

import itertools

name = ‘cai sang zi yue shang liu shao tou’.split()

def zhu(s):

    if s == ‘zi’:

        return False

    else:

        return 2

for x in itertools.dropwhile(zhu,name):

    print x,

#一旦参数中的函数返回值为假时,才会迭代。

7.itertools.groupby(iterable):创建一迭代器,对iterable生成连续的项进行分组,如果iterable在连续迭代中生成了统一项,则会定义同一项。

>>> [list(g) for k, g in itertools.groupby(‘AAAABBBCCD’)]

[[‘A’, ‘A’, ‘A’, ‘A’], [‘B’, ‘B’, ‘B’], [‘C’, ‘C’], [‘D’]]

>>> [k  for k, g in itertools.groupby(‘AAAABBBCCD’)]

[‘A’, ‘B’, ‘C’, ‘D’]

>>> [k  for k, g in itertools.groupby(‘AABAABDBBCCD’)]

[‘A’, ‘B’, ‘A’, ‘B’, ‘D’, ‘B’, ‘C’, ‘D’]

>>> [list(g) for k, g in itertools.groupby(‘AABAABDBBCCD’)]

[[‘A’, ‘A’], [‘B’], [‘A’, ‘A’], [‘B’], [‘D’], [‘B’, ‘B’], [‘C’, ‘C’], [‘D’]]

8.imap(func, *iterables) –> imap object:创建一个迭代器,生成器func(i1,i2,i3,…,in)其中i1,i2,i3,…,in分别来自迭代器iter1,iter2,iter3,itern,如果func为none,则返回(i1,i2,i3,…,in)形式的元组,只要有一个迭代器不再生成值,迭代便停止。

[root@zhu ~]# cat zhu.py

#!/usr/bin/python

import itertools

a = [2,4,6,8]

b = [3,5,7,9]

def cheng(x,y):

    return x*y

for x in itertools.imap(cheng,a,b):

    print x

[root@zhu ~]# python zhu.py

6

20

42

72

Python 的详细介绍请点这里
Python 的下载地址请点这里

推荐阅读:

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11

未经允许不得转载:演道网 » Python 之itertools模块

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册