itertools 介绍
在python中itertool为python提供一系列迭代iterator的方法。
第一个:组合 排列
itertools.combinations(sq, r)
该函数的作用是在列表sq中穷举所有的组合项目。 地一个参数是列表,第二个参数一个项中的个数。
比如参数为‘abcd’和2。意思为从abcd中两两组合。 ab,ac,ad,bc,bd,cd
import itertools
str = 'abcd'
com = itertools.combination(str, 2)
print [item for item in com]
结果:[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
这是组合,自然有排列。
排列和组合的区别在于一个元素tuple内,先后顺序是否决定一个元素。比如(a,b)与(b,a),组合认为这是一个tuple,而排列认为这是两个。
组合的函数有:combinations,combinations_with_replacement。 两者区别在于是否出现如(a,a),(b,b)这种元素。
排列:product, permutations
itertools.compress(list, selector):
根据selector的true和false选择list中的字符
比如list=‘abcd' selector=[1,2,0,0] 选择结果ab
import itertools
test = 'abcdefghijk'
selector = [1,2,3,0,0,0,1,1,1,1,1]
it = itertools.compress(test, selector)
for [item for item in it]
print [item for item in it]
结果:['a', 'b', 'c', 'g', 'h', 'i', 'j', 'k']
无限的函数
itertools.count(start, step)
从start开始,每次增长step。
如itertools.count(2, 5) 迭代后 2, 7, 12, 17, 22, 27,。。。。。
itertools.circle(p)
圈,很形象的函数名称。将p列表周而复始的迭代。
如itertools.circle('abcd'), 结果: a b c d a b c d a b c d a b c d......
itertools.repeat(elem, n)
将elem循环n次,如果没有参数n,无限循环。
itertools.repeat('abc', 4) 结果 abc abc abc abc
itertools.repeat('ab') 结果:ab ab ab 。。。。
根据条件选择内容:
itertools.dropwhile(pred, list)
itertools.takewhile(pred, list)
将list内容元素放入pred中进行判断,如果为True, dropwhile:丢弃, takewhile:保留。
import itertools
test = [3,4,5,6,7,8,9]
it = itertools.dropwhile(lambda x:x<6, test)
print [item for item in it]
it = itertools.takewhile(lambda x:x<6, test)
print [item for item in it]
结果:[6, 7, 8, 9] [3, 4, 5]
类似函数:ifilter, ifilterfalse
函数调用
itertools.imap(func, para1list, para2list,×)
从para1list和para2list获取参数调用函数func。
import itertools
def func(a, b, c):
return a + b + c
list1 = [1,2,3,4]
list2 = [5,6,7,8]
list3 = [0,1,0,1]
it = itertools.imap(func, list1, list2, list3)
print [item for item in it]
结果:[6, 9, 10, 13]
类似函数:starmap
打包:
itertools.izip(list1, list2,*)
将list1中的元素与list2中的元素对应位置成为一个tuple。
list1 = [1,2,3,4]
list2 = [5,6,7,8]
list3 = [0,1,0,1]
it = itertools.izip(list1, list2, list3)
print [item for item in it]
结果:[(1, 5, 0), (2, 6, 1), (3, 7, 0), (4, 8, 1)]
如果列表长度不一致,返回最短。
list1 = [1,2,3,4]
list2 = [5,6]
list3 = [0,1,0,1]
it = itertools.izip(list1, list2, list3)
print [item for item in it]
结果:[(1, 5, 0), (2, 6, 1)]
如果希望根据最长的列表返回,这就需要对短的列表进行填充。
list1 = [1,2,3,4]
list2 = [5,6]
list3 = [0,1,0,1]
it = itertools.izip_longest(list1, list2, list3, fillvalue='x')
print [item for item in it]
结果:[(1, 5, 0), (2, 6, 1), (3, 'x', 0), (4, 'x', 1)]
itertools 介绍的更多相关文章
- python基础=== itertools介绍(转载)
原文链接:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...
- python自带的排列组合函数
需求: 在你的面前有一个n阶的台阶,你一步只能上1级或者2级,请计算出你可以采用多少种不同的方法爬完这个楼梯?输入一个正整数表示这个台阶的级数,输出一个正整数表示有多少种方法爬完这个楼梯. 分析:提炼 ...
- python迭代器以及itertools模块
迭代器 在python中,迭代器协议就是实现对象的__iter()方法和next()方法,其中前者返回对象本身,后者返回容器的下一个元素.实现了这两个方法的对象就是可迭代对象.迭代器是有惰性的,只有在 ...
- python itertools 模块讲解
1.介绍itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存. 使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环. - 无限迭代器 itertool ...
- 迭代器模块 itertools
无限迭代器 itertools 包自带了三个可以无限迭代的迭代器.这意味着,当你使用他们时,你要知道你需要的到底是最终会停止的迭代器,还是需要无限地迭代下去. 这些无限迭代器在生成数字或者在长度未知的 ...
- Python的itertools模块
本章将介绍Python自建模块itertools,更多内容请参考:Python参考指南 python的自建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertool ...
- HBase - Filter - 过滤器的介绍以及使用
1 过滤器HBase 的基本 API,包括增.删.改.查等.增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询( ...
- 【Python】operator 模块简单介绍
简单介绍几个常用的函数,其他的请参考文档. operator.concat(a, b) **operator.__concat__(a, b)** 对于 a.b序列,返回 a + b(列表合并) -- ...
- [PY3]——过滤数据——列表推导、filter()、itertools.compress()
问题 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 解决方案 最简单的过滤数据的方法,就是使用列表推导. 使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集 ...
随机推荐
- .NET开源项目常用记录
综合类 微软企业库 微软官方出品,是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题, 如安全(Security).日志(Logging).数据访问(Data Access).配置管理( ...
- wpf中手风琴控件Accordion编辑模板后控件不正常。
昨天有个网友Accordion控件从sl迁移到wpf时候显示不正常.也是就没有效果. 我也是sl做的比较多,wpf玩的少,Accordion模板里触发器,状态组调了一早上都没达到满意效果, 无奈只有百 ...
- tomcat与HTML命令提示符
在tomcatwebapps目录下建立一个新文件夹 命名为my 把第一个学习的HTML文件放到my文件夹内 通过tomcat服务器远程访问该网页 把localhost换成自己的IP地址 先查看自己的I ...
- BZOJ4369 : [IOI2015]teams分组
将分组计划按照$k$从小到大排序,维护一个单调栈,每个元素为一个矩形,按最底下元素从高到低排列,栈顶最低. 每次加入一个矩形可选区域,维护单调栈,可以往回合并. 然后将所有最低点不满足的矩形取出,合并 ...
- 经验分享:多屏复杂动画CSS技巧三则
当下CSS3应用已经相当广泛,其中重要成员之一就是CSS3动画.并且,随着CSS动画的逐渐深入与普及,更复杂与细腻的动画场景也如雨后春笋般破土而出.例如上个月做的「企业QQ-新年祝福」活动: 感谢sh ...
- 移动H5前端性能优化指南(转载)
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries
在已经搭建好的集群环境Centos6.6+Hadoop2.7+Hbase0.98+Spark1.3.1下,在Win7系统Intellij开发工具中调试Spark读取Hbase.运行直接报错: ? 1 ...
- OO与设计模式的原则、目标
OO与设计模式的原则.目标(转) 前两天,和一朋友聊到OO设计原则时,对设计模式有了更深的了解,在这里总结一下,与大家分享.OO(Object–Oriented )面向对象 OO方法(Object ...
- Facebook通过oAuth验证获取json数据
首先下载facebook相关的动态库,下载文件:facebook.dll 获取授权token方法: private string SetToken(string gettoken)//此处是你的短to ...
- Jenkins 2.7.3 LTS 发布
更新如下: Stop A/B testing of the remoting JNLP3 protocol due to the known issues. The protocol can be e ...