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模块 合并 和 分解 ...
随机推荐
- Java - 异常解析基础
java提高篇(十六)-----异常(一) 一.为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位 ...
- Linux常用基本命令(tail )
tail命令 作用:从文件的尾部查看,跟head命令作用相反,参数也差不多,默认显示后面10行 格式: tail [option] [file] -n : 显示行数 -c<字节数> gho ...
- element-ui inputNumber、Card 、Breadcrumb组件源码分析整理笔记(三)
inputNumber组件 <template> <!--@dragstart.prevent禁止input中数字的拖动--> <div @dragstart.preve ...
- Tornado入门
一.概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像是一个py文件,不过为了能有效利用非阻塞式服务器环境,这 ...
- 从零开始学习html(十)CSS格式化排版——下
六.文字排版--删除线 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&q ...
- kvm 创建新虚拟机命virt-install 使用说明
virt-install 命令说明 1.命令作用 建立(provision)新虚拟机 2.语法 virt-install [选项]... 3.说明(DESCRIPTION) vi ...
- 实验:JS判断浏览器中英文版本
<script type="text/javascript"> var lang = (navigator.systemLanguage?navigator.syste ...
- 检查xml文件
#coding=utf- import os import time def verify(filePath): print("verify--" + filePath) list ...
- Python网络爬虫笔记(一):网页抓取方式和LXML示例
(一) 三种网页抓取方法 1. 正则表达式: 模块使用C语言编写,速度快,但是很脆弱,可能网页更新后就不能用了. 2. Beautiful Soup 模块使用Python编写,速度慢. ...
- LeetCode题解之Copy List with Random Pointer
1.题目描述 2.问题分析 首先要完成一个普通的单链表的深度复制,然后将一个旧的单链表和新的单链表的节点使用map对应起来,最后,做一次遍历即可. 3.代码 RandomListNode *copyR ...