itertools 模块,为高效循环提供了许多创建迭代器的函数,较为实用的一个模块

模块内置函数:

1、无穷的迭代器:

count([start, [step]]):从 start(默认 0)开始,以 step(默认1)为步长迭代,用于整数较好,用于浮点数时为了精确可以使用(start + step * i for i in count())
cycle(iterable):迭代 iterable,同时复制每个值,iterable 迭代完后,无限循环复制的值。结果就是无限循环 iterable
repeat(object[, times]):重复 object 指定次数,没有指定则无限循环,与 cycle 不同之处在于它重复的是整体,而 cycle 会将每个元素单独输出

无穷迭代器通常搭配 imap() 生成连续数据或 izip() 添加序列数

2、生成排列组合的生成器:

product(*iterables[, repeat]):从每个 iterables 中挑选 1 个元素总共 repeat 组,进行排列(有顺序),算自身和自身的排列
permutations(iterable, r):从 iterable 中挑选 r 个进行排列(有顺序),不算自身和自身的排列
combinations(iterable, r):从 iterable 中挑选 r 个进行组合(无顺序),不算自身和自身的组合
combinations_with_replacement(iterable, r):从 iterable 中挑选 r 个进行组合(无顺序),算自身和自身的组合

3、其余的迭代器:

3.1、连接多个迭代器

chain(*iterables):把所有 iterables 组合到一个中,返回新的迭代器。类方法:chain.from_iterable(iterable):具体什么意思没搞懂,说不清楚

3.2、从一个迭代器中挑选所需要的东西

compress(data, selectors):从 data 中挑选出对应位置 selectors 返回 True 的元素,其中一个迭代完了就停止
dropwhile(predicate, iterable):弃掉 predicate 第一次不为真的之前的所有元素
takewhile(predicate, iterable):弃掉 predicate 第一次不为真的之后的所有元素
ifilter(predicate, iterable):从 iterable 中选出 predicate 为真的元素,创建一个新的迭代器,若 predicate 为 None,就返回 iterable 中为真的元素
ifilterfalse(predicate, iterable):从 iterable 中选出 predicate 为假的元素,创建一个新的迭代器,若 predicate 为 None,就返回 iterable 中为假的元素
islice(iterable, stop):从 iterable 中选出第一个至 stop 为止(包括stop)的元素,创建一个新的迭代器
islice(iterable, start, stop[, step]):从 iterable 中选出 start(不包括start)至 stop 为止(包括stop)的元素,创建一个新的迭代器

3.3、计算各个迭代器的函数计算结果

imap(function, *iterables):迭代每个 iterable 中的元素,作为 function 的参数计算结果,只要其中一个 iterable 迭代完了就停止,如果 function 为 None,就返回元组
starmap(function, iterable):用于计算的元素已经被事先以 tuple 形式组合在一个 iterable 中的情况,相当于 function(a,b) 和 function(*c) 的区别
izip(*iterables):迭代每个 iterable 中的元素,将其组合到一起作为一个新元素,只要其中一个 iterable 迭代完了就停止
izip_longest(*iterables[, fillvalue]):迭代每个 iterable 中的元素,将其组合到一起作为一个新元素,短的 iterable 迭代完了,就用 fillvalue 代替
groupby(iterable[, key]):key 是计算 iterable 中每个元素结果的函数,计算结果相同的为一组,返回结果为一个二元元组,第一个元素是计算结果,第二个元素是保存了原数据的迭代器。元素产生相同结果但是没有连续则算两个结果。
[k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
[list(g) for k, g in groupby('AAAABBBCCDAABBB')] --> AAAA BBB CC D AA BBB

3.4、复制一个迭代器(像细胞分裂)

tee(iterable[, n=2]):把一个 iterable 分裂成 n 个相同迭代器,完成 tee 操作后,原迭代器不能再使用

Python2.7-itertools的更多相关文章

  1. Python标准模块--itertools

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

  2. Effective Python2 读书笔记1

    Item 2: Follow the PEP 8 Style Guide Naming Naming functions, variables, attributes lowercase_unders ...

  3. 交叉编译Python-2.7.13到ARM(aarch32)—— 支持sqlite3

    作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 环境 主机: ubuntu14.04 64bit 开发板: qemu + vexpress-a9 (参考: ...

  4. 自学Python2.7-collections系列

    Python collections系列 Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供 ...

  5. python2 与 python3的区别

    python2 与 python3的区别 几乎所有的python2程序都需要一些修改才能正常的运行在python3的环境下.为了简化这个转换过程,Python3自带了一个2to3的实用脚本.这个脚本会 ...

  6. python2 与 python3 语法区别

    python2 与 python3 语法区别 概述# 原稿地址:使用 2to3 将代码移植到 Python 3 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为 ...

  7. 交叉编译python2.7.7

    一.python下载网址: http://www.python.org/ftp/python/ 二.python的交叉编译依赖openssl ,openssl的下载网址: https://www.op ...

  8. python2 与 python3的区别总结

    python2 与 python3的区别总结    几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的 ...

  9. Python2 和Python3 的差异总结

    一.基本语法差异 1.1 核心类差异 Python3对Unicode字符的原生支持 Python2中使用 ASCII 码作为默认编码方式导致string有两种类型str和unicode,Python3 ...

  10. python itertools模块练习

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

随机推荐

  1. redis服务部署脚本

    yum install -y gcc jemalloc-devel cd /usr/local/src curl -L -O http://download.redis.io/releases/red ...

  2. Software-Defined Networking A Comprehensive Survey --阅读_day2

    3. 什么是SDN?(WHAT IS SOFTWARE-DEFINED NETWORKING?) The term SDN was originally coined to represent the ...

  3. JS中深浅拷贝 函数封装代码

    一.了解 基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问. 二.浅拷贝 浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一 ...

  4. js-ES6学习笔记-Class(6)

    1.类相当于实例的原型,所有在类中定义的方法,都会被实例继承.如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”. 2.父类的静态方法,可 ...

  5. MVC与单元测试实践之健身网站(三)-角色与权限

    管理员的维护功能完成后,还有权限和角色,三者构成权限系统.这里采用的RBAC是最经典.最简单的一种,权限-角色-管理员只能层层传递,并不能直接为管理员分配权限. 一 权限.角色管理 a) 权限 之前编 ...

  6. AndroidKiller报.smali文件丢失问题解决(关闭Android Studio的Instant Run)

    第一节编写一个Android程序里我们生成了一个验证激活码的apk,当我们输入的激活码正确时才能注册成功,输入错误时注册失败. 现在我们想输入错误的激活码也能注册.我们用Android反编译工具进行反 ...

  7. 单元测试,模拟用户Get登陆,并携带登录后的token访问接口

    HttpClient _httpClient; HttpClient _businessHttpClient; private async Task<string> GetAccessTo ...

  8. Oracle EBS OPM 生产批创建事务处理

    --生产批创建事物处理 --created by jenrry DECLARE p_mmti_rec mtl_transactions_interface%ROWTYPE; p_mmli_tbl gm ...

  9. 反向代理负载均衡调度:nginx

    一.概述 反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个 ...

  10. sql server 时间格式转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...