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模块 合并 和 分解 ...
随机推荐
- 【代码笔记】iOS-字体从右向左滚动
一,效果图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...
- 【读书笔记】iOS-网络-HTTP-请求内容
一,GET方法. 从服务器获取一段内容,用HTTP术语来说就是实体.GET请求通常不包含请求体,不过也是可以包含的.有些网络缓存设施只会缓存GET响应.GET请求通常不会导致服务器端的数据变化. 二, ...
- 记录搭建Odoo框架
一.获取 Odoo 源码 Odoo 是一个开源项目,我们可以轻松的在 Github 上找到它的源码.本次中使用的是 12.0 版本的 Odoo,所以在拉取代码时选择 12.0 的分支.确保拉取的速度, ...
- error C2998:不能是模板定义的错误解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 在一个非模板类中定义了一个模板函数,如下: template<typename T> bool HDF5_ ...
- <Android 应用 之路> 一个类似今日头条的APP
简介 最近花了一两天的时间完成一个简易的新闻头条客户端的应用,引用到了SwipeRefreshLayout,CircleImageView,RxAndroid,Picasso,PhotoPicker等 ...
- SD从零开始25-28
SD从零开始25 装运的组织单元(Organizational Units in Shipping) 组织结构-后勤Organizational Structure-Logistics Plant在后 ...
- 用venv 配置不同的开发环境
首先使用pip 命令安装 pip install virtualenv (以下是使用win10 操作系统) 1: 在工作目录下创建一个文件夹 mkdir mypython_space 2:然后执行 ...
- dcloud资源升级方式更新app
var wgtVer = null; plus.runtime.getProperty(plus.runtime.appid, function(inf) { wgtVer = inf.version ...
- Android5.x Notification应用解析
Notification可以让我们在获得消息的时候,在状态栏,锁屏界面来显示相应的信息,很难想象如果没有Notification,那我们的qq和微信以及其他应用没法主动通知我们,我们就需要时时的看手机 ...
- Android--PullToRefreshListView的onRefreshComplete()不起作用的问题
今天用到了网上开源的下拉刷新组件PullToRefreshListView的第三方下拉刷新的ListView 我们发现 有时候我们当使用它的onRefreshComplete()方法是,我们下拉出来的 ...