itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用。

chain(iter1, iter2, ..., iterN):

给出一组迭代器(iter1, iter2, ..., iterN),此函数创建一个新迭代器来将所有的迭代器链接起来,返回的迭代器从iter1开始生成项,知道iter1被用完,然后从iter2生成项,这一过程会持续到iterN中所有的项都被用完。

  1. 1 from itertools import chain
  2. 2 test = chain('AB', 'CDE', 'F')
  3. 3 for el in test:
  4. 4 print el
  5. 5
  6. 6 A
  7. 7 B
  8. 8 C
  9. 9 D
  10. 10 E
  11. 11 F

这里再举个斐波那契的例子:

  1. from itertools import chain
  2.  
  3. class Fei:
  4.  
  5. @staticmethod
  6. def fibon(n):
  7. a=b=1
  8. for i in range(n):
  9. yield a
  10. a,b=b,a+b
  11.  
  12. def __iter__(self):
  13. return Fei.fibon(100)
  14.  
  15. fei=Fei()
  16.  
  17. test=chain(,fei)
  18.  
  19. for el in test:
  20. print(el)

  

chain.from_iterable(iterables):

一个备用链构造函数,其中的iterables是一个迭代变量,生成迭代序列,此操作的结果与以下生成器代码片段生成的结果相同:

  1. 1 >>> def f(iterables):
  2. 2 for x in iterables:
  3. 3 for y in x:
  4. 4 yield y
  5. 5
  6. 6 >>> test = f('ABCDEF')
  7. 7 >>> test.next()
  8. 8 'A'
  9. 9
  10. 10
  11. 11 >>> from itertools import chain
  12. 12 >>> test = chain.from_iterable('ABCDEF')
  13. 13 >>> test.next()
  14. 14 'A'

  这里说明一下:

combinations(iterable, r):

创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序:

  1. >>> from itertools import combinations
  2. >>> test = combinations([1,2,3,4], 2)
  3. >>> for el in test:
  4. print el
  5.  
  6. (1, 2)
  7. (1, 3)
  8. (1, 4)
  9. (2, 3)
  10. (2, 4)
  11. (3, 4)

  

count([n]):

创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算(注意:此迭代器不支持长整数),如果超出了sys.maxint,计数器将溢出并继续从-sys.maxint-1开始计算。

cycle(iterable):

创建一个迭代器,对iterable中的元素反复执行循环操作,内部会生成iterable中的元素的一个副本,此副本用于返回循环中的重复项。

dropwhile(predicate, iterable):

创建一个迭代器,只要函数predicate(item)为True,就丢弃iterable中的项,如果predicate返回False,就会生成iterable中的项和所有后续项。

  1. def dropwhile(predicate, iterable):
  2. 2 # dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
  3. 3 iterable = iter(iterable)
  4. 4 for x in iterable:
  5. 5 if not predicate(x):
  6. 6 yield x
  7. 7 break
  8. 8 for x in iterable:
  9. 9 yield x

  

groupby(iterable [,key]):

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

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

ifilter(predicate, iterable):

创建一个迭代器,仅生成iterable中predicate(item)为True的项,如果predicate为None,将返回iterable中所有计算为True的项。

  1. ifilter(lambda x: x%2, range(10)) --> 1 3 5 7 9

ifilterfalse(predicate, iterable):

创建一个迭代器,仅生成iterable中predicate(item)为False的项,如果predicate为None,则返回iterable中所有计算为False的项。

  1. ifilterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8

imap(function, iter1, iter2, iter3, ..., iterN)

创建一个迭代器,生成项function(i1, i2, ..., iN),其中i1,i2...iN分别来自迭代器iter1,iter2 ... iterN,如果function为None,则返回(i1, i2, ..., iN)形式的元组,只要提供的一个迭代器不再生成值,迭代就会停止。

  1. >>> from itertools import *
  2. 2 >>> d = imap(pow, (2,3,10), (5,2,3))
  3. 3 >>> for i in d: print i
  4. 4
  5. 5 32
  6. 6 9
  7. 7 1000
  8. 8
  9. 9 ####
  10. 10 >>> d = imap(pow, (2,3,10), (5,2))
  11. 11 >>> for i in d: print i
  12. 12
  13. 13 32
  14. 14 9
  15. 15
  16. 16 ####
  17. 17 >>> d = imap(None, (2,3,10), (5,2))
  18. 18 >>> for i in d : print i
  19. 19
  20. 20 (2, 5)
  21. 21 (3, 2)

  http://www.cnblogs.com/cython/articles/2169009.html

python每日一类(5):itertools模块的更多相关文章

  1. python每日一类(3):os和sys

    os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...

  2. python排列组合之itertools模块

    1. 参考 几个有用的python函数 (笛卡尔积, 排列, 组合) 9.7. itertools — Functions creating iterators for efficient loopi ...

  3. python每日一类(4):slice

    class slice(stop)class slice(start, stop[, step]) Return a slice object representing the set of indi ...

  4. python每日一类(2):platform

    根据官方文档的解释(https://docs.python.org/3.5/library/platform.html#module-platform): 学习其他人的代码如下: # python p ...

  5. python每日一类(1):pathlib

    每天学习一个python的类(大多数都是第三方的),聚沙成金. -------------------------------------------------------------------- ...

  6. python itertools模块练习

    参考 <python标准库> 也可以参考Vamei博客 列表用着很舒服,但迭代器不需要将所有数据同时存储在内存中. 本章练习一下python 标准库中itertools模块 合并 和 分解 ...

  7. 高效的 itertools 模块(转)

    原文地址:http://python.jobbole.com/87380/ 我们知道,迭代器的特点是:惰性求值(Lazy evaluation),即只有当迭代至某个值时,它才会被计算,这个特点使得迭代 ...

  8. 转:Python itertools模块

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

  9. python, itertools模块

    通过itertools模块,可以用各种方式对数据进行循环操作 1, chain() from intertools import chain for i in chain([1,2,3], ('a', ...

随机推荐

  1. android systemtrace 报错

    折腾了很久,妈的,终于可以跑出来systemtrace了.如果你跟我一样,老是生成trace失败,那么,按我说的啦: 坑就在,你必须选一个路径存放trace.html,你不选一个,他就生成不了. 打开 ...

  2. 四大VDI客户端 总有一款适合你

    [TechTarget中国原创] 交付虚拟桌面时IT管理员必须要考虑到用户如何访问虚拟桌面,因为这会影响用户体验以及VDI部署最终的成败. IT可以转向简便的HTML5客户端,HTML 5客户端功能丰 ...

  3. ceph 存储系统

    http://w w w.c s d n 123.com/html/topnews201408/2/4702.htm

  4. 剑指Offer - 九度1519 - 合并两个排序的链表

    剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hi ...

  5. 《数据结构》C++代码 线性表

    线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储).代码里天天用,简单写写. 首先是数组,分静态.动态两种,没什么可说的,注意动态的要手动释放内存就好了. 其次是链表,依旧分静态.动态.课 ...

  6. python学习笔记十三:Flask demo

    一.Flask简介 Flask 是一个 Python 实现的 Web 开发微框架.官网:http://flask.pocoo.org/ 二.Demo 1.代码结构 . ├── blog.py ├── ...

  7. Ajax异步与JavaScript的一些初浅认识

    向服务器请求数据的技术 有以下五种常用技术用于向服务器请求数据 XMLHttpRequest(XHR) Dynamic script tag insertion(动态脚本标签插入) iframes C ...

  8. linux文件上传下载笔记(rz,sz,sftp,scp)命令

    软件(包)安装/卸载 yum -y install 包名(支持*) :自动选择y,全自动yum install 包名(支持*) :手动选择y or nyum remove 包名(不支持*)rpm -i ...

  9. Linux认知之旅【06 图形界面上的各种折腾】!

    玩linux免不了折腾,不折腾对不起linux 初次接触, 总会接触到绚丽的linux桌面! 但是随之而来的桌面优化,字体安装,操作习惯都需要一一适应

  10. NodeJs02 美女爬虫

    note: demo代码要编号 导出模块 一个js文件就是一个模块,模块内部的所有变量,对象,方法对外界都不可见.如果想暴漏出去让别人用,就需要导出模块.语法如下: module.exports = ...