itertools模块提供的全部是处理迭代功能的函数,他们的返回值不是list,而是迭代对象,只有在for循环的时候才会真正去计算。

使用迭代器的好处是在循环的时候才去取值,而直接返回值为list的结果会占用大量的内存,从而使用迭代器的话,使用了惰计算的方式,或者是延迟计算,从而在性能上能好很多。

在使用import的时候,具有两种方式,如下:

import itertools
from itertools import *

第一种是直接进行导入,在使用模块里的函数的时候,必须带有前缀itertools,然后用.进行应用

第二种是from import形式,在使用模块里的函数的时候,直接使用函数名即可,不需要带itertools的前缀

1、 迭代器imap和map的使用

itre = itertools.imap(pow,[1,2,3],[1,2,3])
print itre
for i in itre:
print i
li = map(pow,[1,2,3],[1,2,3])
print li

执行结果如下:

<itertools.imap object at 0x7fe364cf4610>
1
4
27
[1, 4, 27]

从结果中可以看到,imap函数返回的是一个迭代器,而map函数返回的是一个list

2、 迭代器ifilter和filter的使用

ifil = itertools.ifilter(lambda x:x >5 ,range(10))
print ifil
for i in ifil:
print i
ifilfalse = itertools.ifilterfalse(lambda x:x>5,range(10))
print ifilfalse
for i in ifilfalse:
print i li = filter(lambda x:x>5,range(10))
print li

执行结果如下:

<itertools.ifilter object at 0x7fe364cf46d0>
6
7
8
9
<itertools.ifilterfalse object at 0x7fe364cf4750>
0
1
2
3
4
5
[6, 7, 8, 9]

从执行结果可以看到,ifilter和filter和ifilterfalse都是起到一个过滤的作用,但是ifilter和ifilterfalse都是返回一个迭代器,而filter则是返回一个列表

3、 迭代器takewhile和dropwhile函数

take = itertools.takewhile(lambda x:x>5,[6,2,6,7,3])
for i in take:
print 'this is the takewhile function ',i
drop = itertools.dropwhile(lambda x:x>5,[1,2,6,7,3])
for i in drop:
print 'this is the dropwhile function ',i

takewhile函数表示遇到true进行收集到迭代器中,遇到false之后,退出

driopwhile函数表示遇到false的时候,跳过此元素,当true的时候收集剩余的元素,执行结果如下:

this is the takewhile function  6
this is the dropwhile function 1
this is the dropwhile function 2
this is the dropwhile function 6
this is the dropwhile function 7
this is the dropwhile function 3

4、 迭代器groupby方法

import itertools

def height_alias(height):
if height > 180:
return 'tall'
elif height < 160:
return 'short'
else:
return 'middle' persons = [191,159,156,170,177,190,183,185]
sorted(persons,key=height_alias) for m,n in itertools.groupby(persons,key=height_alias):
print m
print (list(n))

groupby主要是将相邻的相同的元素放在一起,然后进行返回,在上述的方法中,可以看到使用sorted方法,主要是将数据进行排序,然后挑选相邻的元素将符合条件的进行输出,得到一个统计的作用,执行结果如下:

tall
[191]
short
[159, 156]
middle
[170, 177]
tall
[190, 183, 185]

groupby(iterable [,key]):

创建一个迭代器,对iterable生成的连续项进行分组,在分组过程中会查找重复项。

如果iterable在多次连续迭代中生成了同一项,则会定义一个组,如果将此函数应用一个分类列表,那么分组将定义该列表中的所有唯一项,key(如果已提供)是一个函数,应用于每一项,如果此函数存在返回值,该值将用于后续项而不是该项本身进行比较,此函数返回的迭代器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。

5、 chain函数

主要是将几个序列进行加起来,然后返回一个迭代器,itertools.chain('kel','other')

6、 count函数

主要输出自然序列,第一个为开始的数字,第二个参数为步长,itertools.count(2,2),输出从2开始,以2为步长的无限迭代器

7、 cycle函数

主要是将一个序列无限输出,重复,itertools.cycle('kel')

8、 repeat函数

主要是进行重复一个序列,第二个参数为重复的次数 ,itertools.repeat('kel',2)表示将序列kel重复两次的迭代器

迭代的模块itertools的更多相关文章

  1. Python标准模块--itertools

    1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...

  2. python基础===Python 迭代器模块 itertools 简介

    本文转自:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  3. 四十六 常用内建模块 itertools

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...

  4. Python3之内建模块itertools

    python的内建模块itertools提供了非常有用的用于操作迭代对象的函数 首先,我们看看itertools提供的几个无限迭代器 >>> import itertools > ...

  5. 迭代器模块 itertools

    无限迭代器 itertools 包自带了三个可以无限迭代的迭代器.这意味着,当你使用他们时,你要知道你需要的到底是最终会停止的迭代器,还是需要无限地迭代下去. 这些无限迭代器在生成数字或者在长度未知的 ...

  6. Python学习笔记(迭代、模块扩展、GUI 、编码处理等)

    PythonIDLE中的编码处理 http://www.tuicool.com/articles/NbyEBr 原文标题:Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来 ...

  7. Python 模块 itertools

    python 2.6 引入了itertools模块,使得排列组合的实现非常简单: import itertools 有序排列:e.g., 4个数内选2个排列: >>> print l ...

  8. itertools:处理可迭代对象的模块

    合并和分解迭代器 chain chain可以接收多个可迭代对象(或者迭代器)作为参数,最后返回一个迭代器. 它会生成所有输入迭代器的内容,就好像这些内容来自一个迭代器一样. 类似于collection ...

  9. 转:Python itertools模块

    itertools Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个"无限"迭代器: >>& ...

随机推荐

  1. [转载]TexturePacker 如何使用自带的加密功能及在cocos2dx中的使用

    在cocos2dx中使用纹理图集是非常节省资源的,在这里推荐 TexturePacker,而且 TexturePacker工具的加密接口也非常的好用,下面就来介绍一下... TexturePacker ...

  2. Combiner

    如果job 设置了 combiner ,则job的每个map运行的数据会先进入combiner,然后再通过patitioner分发到reduce.通过combiner能减少reduce的计算.空间压力 ...

  3. Activity Recognition行为识别

    暑假听了computer vision的一个Summer School,里面Jason J. Corso讲了他们运用Low-Mid-High层次结构进行Video Understanding 和 Ac ...

  4. PHP代码优化技巧大盘点

    PHP优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码.本文给大家提供全面的优化技巧. 1.echo比print快. 2.使用echo的多重参数代替字符串连接. 3.在执行for循环之前确 ...

  5. 局域网聊天软件(winsocket)

    LANChat工作整理 2013/8/22 程序实现功能: 局域网聊天软件,启动即可找到在线设备,并能够进行简单的文字聊天. 其实下面这个框图已经说明了程序的绝大部分功能原理. 核心类的程序框图 我觉 ...

  6. [原]HDU-1598-find the most comfortable road(暴力枚举+Kruskal最小生成树)

    题意: 给出一个图,然后Q个询问,每次询问从一个节点到另一个节点,联通图中的“最大边和最小边之差”的最小值,但如果节点之间不连通,则输出-1. 思路:由于询问Q < 11,m < 1000 ...

  7. 汉字编码:GB2312, GBK, GB18030, Big5

    前一篇博文:ANSI是什么编码?中有这样一段小故事: 话说计算机是由美国佬搞出来的嘛,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母.数字和常用特殊符号已经绰绰有余了(其实ASCII ...

  8. java中String类学习

    java中String类的相关操作如下: (1)初始化:例如,String s = “abc”; (2)length:返回字符串的长度. (3)charAT:字符操作,按照索引值获得字符串中的指定字符 ...

  9. word-pattern(mock)

    注意: // String要用equals,不然比较结果不对,会出bug// 使用String.split // boolean打印用 %b  // abba 对应 cccc 也不行, 所以要用set ...

  10. 多线程操作(循环往listbox中添加数据)

    一.先造一个窗体,其中就开始按钮,暂停按钮,以及listbox文本框 二.当点击开始的时候,数据会无限的往listbox中加,为了防止卡住和提升效率,便造了一个新的线程来执行开始操作 namespac ...