Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Python 之itertools模块

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...01234>>> 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为开始值。默认为05.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/pythonimport itertoolsa = []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.pyzi yue shang liu shao tou[root@zhu ~]# cat zhu.py#!/usr/bin/pythonimport itertoolsname = "cai sang zi yue shang liu shao tou".split()def zhu(s):    if s == "zi":        return False    else:        return 2for 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/pythonimport itertoolsa = [2,4,6,8]b = [3,5,7,9]def cheng(x,y):    return x*yfor x in itertools.imap(cheng,a,b):    print x[root@zhu ~]# python zhu.py6204272Python 的详细介绍:请点这里
Python 的下载地址:请点这里推荐阅读:《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htmPython脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm