Python2.7-itertools
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的更多相关文章
- Python标准模块--itertools
1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...
- Effective Python2 读书笔记1
Item 2: Follow the PEP 8 Style Guide Naming Naming functions, variables, attributes lowercase_unders ...
- 交叉编译Python-2.7.13到ARM(aarch32)—— 支持sqlite3
作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 环境 主机: ubuntu14.04 64bit 开发板: qemu + vexpress-a9 (参考: ...
- 自学Python2.7-collections系列
Python collections系列 Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供 ...
- python2 与 python3的区别
python2 与 python3的区别 几乎所有的python2程序都需要一些修改才能正常的运行在python3的环境下.为了简化这个转换过程,Python3自带了一个2to3的实用脚本.这个脚本会 ...
- python2 与 python3 语法区别
python2 与 python3 语法区别 概述# 原稿地址:使用 2to3 将代码移植到 Python 3 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为 ...
- 交叉编译python2.7.7
一.python下载网址: http://www.python.org/ftp/python/ 二.python的交叉编译依赖openssl ,openssl的下载网址: https://www.op ...
- python2 与 python3的区别总结
python2 与 python3的区别总结 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的 ...
- Python2 和Python3 的差异总结
一.基本语法差异 1.1 核心类差异 Python3对Unicode字符的原生支持 Python2中使用 ASCII 码作为默认编码方式导致string有两种类型str和unicode,Python3 ...
- python itertools模块练习
参考 <python标准库> 也可以参考Vamei博客 列表用着很舒服,但迭代器不需要将所有数据同时存储在内存中. 本章练习一下python 标准库中itertools模块 合并 和 分解 ...
随机推荐
- apache2.4.33伪静态配置入门教程(1)
伪静态: 把动态网页的请求方式伪装成静态网页 要使用伪静态技术,要在httpd.conf中启用伪静态模块: LoadModule rewrite_module modules/mod_rewrite. ...
- JavaScript--DOM操作表格及样式(21)
一 操作表格 // <table>标签是HTML中结构最为复杂的一个,我们可以通过DOM来创建生成它,或者HTMLDOM来操作它; // 使用DOM来创建表格; var table = d ...
- 高性能JavaScript(数据存取)
数据存取分为4各部分 存取位置 作用域及改变作用域 原型以及原型链 缓存对象成员值 存取位置 JavaScript 有4中基本的数据存取位置 字面量:字面量代表自身,不存于特定的位置.比如这个的匿名函 ...
- 工作记录(JS向textarea添加固定内容、通过固定字符将字符串分割为数组)
第一个是在 textarea 输入框中添加固定的内容. 代码如下: <textarea id="text" cols="30" rows="10 ...
- readlink 命令
在Linux中readlink命令的作用是:输出符号链接值或权威文件名(通常使用的是-f参数) 格式:readlink [选项]... 文件 参数: -f, --canonicalize 递归跟随 ...
- Android系统定制和源码开发以及源码编译(附视频)
Android系统定制配套视频: 为了把Android系统源码定制和编译的课程讲完,从准备到录制完所有的视频,一共花去了近半年的时间,前前后后各种下载源码,编译源码,系统不兼容,版本适配,虚拟机配置困 ...
- 解释JS变量作用域的范例
JS的变量作用域只有两种:全局作用域与函数作用域. 用var声明的变量不能简单的说是属于函数作用域,应该是说属于其最近的作用域. var a = 10; function test(){ var a; ...
- 重学C语言---02C语言概述
1.第一个C语言实例 #include<stdio.h> int main(void) /*一个简单的C程序*/ { int num; /*定义一个num的变量*/ num = ; /*为 ...
- 软件工程-XP方法十二个最佳实践
- Jenkins自动构建的几种方式
1.远程URL构建 在任务配置处的构建触发器中选择远程触发,例如,在下图框中输入abc,则只需要在网页上输入地址:Jenkins_URL/job/工程名/build?token=abc 2.利用cur ...