python itertools模块指南
2016-06-07 15:36
393 查看
0x00:简介
itertools——创建高效迭代器的Python模块。0x01:分类
itertools模块可创建的迭代器一般分为三类:无限迭代器 (Infinite Iterators) 终止于最短输入序列的迭代器 (Iterators terminating on the shortest input sequence) 组合生成器 (Combinatoric generators)
0x02:无限迭代器
[1] count
itertools.count(start, step)起始参数(start)默认值为0
步长(step)默认值为1
作用: 返回以start开头的均匀间隔step步长的值
import itertools for item in itertools.count(10,3): if item>100: break print item
结果:
会在终端打印出10,13,16,19,……,100
如果没有出口条件,理论上会从10开始,以3为步长,一直打印下去。
[2] cycle
itertools.cycle(iterable)iterable 为可迭代对象
作用:保存迭代对象的每个元素的副本,无限的重复返回每个元素的副本
import itertools its=["a","b","c","d"] for item in itertools.cycle(its): print item
结果:
会在终端不停的打印出a,b,c,d,a,b,c,d,a,……
[3] repeat
itertools.repeat(object[, times])object为可迭代对象
times为迭代次数,默认为无限次
作用:按照指定的迭代次数重复返回每次的迭代对象
import itertools its=["a","b","c"] for item in itertools.repeat(its,4): print item
结果:
['a', 'b', 'c'] ['a', 'b', 'c'] ['a', 'b', 'c'] ['a', 'b', 'c']
0x03:终止于最短输入序列的迭代器
这部分包括如下函数,只对部分函数进行说明。chain() compress() dropwhile() groupby() ifilter() ifilterfalse() islice() imap() starmap() tee() takewhile() izip() izip_longest()
[1] chain
itertools.chain(*iterables)*iterables为一个或多个可迭代序列
作用:返回所有可迭代序列
import itertools its=["a","b","c","d"] hers=["A","B","C","D"] others=["1","2","3","4"] for item in itertools.chain(its,hers,others): print item
结果:
a b c d A B C D 1 2 3 4
[2] compress
itertools.compress(data, selectors)data为数据对象
selectors为选择器(规则)
作用:返回数据对象中对应规则为True的元素
import itertools its=["a","b","c","d","e","f","g","h"] selector=[True,False,1,0,3,False,-2,"y"] for item in itertools.compress(its,selector): print item
结果:
a c e g h
ifilter和ifilterfalse与其有些相似
返回谓词结果为True(ifilter)\False(ifilterfalse)的迭代器元素
itertools.ifilter(predicate, iterable)
takewhile又和ifilter十分相像:
itertools.takewhile(predicate, iterable)
import itertools for item in itertools.ifilter(lambda x:x/3,range(6)): print item print "\n" for item in itertools.ifilterfalse(lambda x:x-3,range(6)): print item
结果:
3 4 5 3
[3] imap
itertools.imap(function, *iterables)function为功能函数
*iterables为可迭代序列
作用:返回迭代序列中每个元素被功能函数执行后的值
import itertools digi=[1,2,0] for item in itertools.imap(lambda x:x+3,digi): print item
结果:
4 5 3
[4] izip
itertools.izip(*iterables)*iterables为一个或多个可迭代对象
作用:返回所有可迭代对象的迭代器(止于最短序列)
import itertools digi=[1,2,0] hers=["A","B","C","D"] for item in itertools.izip(hers,digi): print item print "\n" for item in itertools.izip(digi,hers): print item
结果:
('A', 1) ('B', 2) ('C', 0) (1, 'A') (2, 'B') (0, 'C')
izip_longest则与izip有点相反的味道(止于最长序列)
itertools.izip_longest(*iterables[, fillvalue])
import itertools digi=[1,2,0] hers=["A","B","C","D"] for item in itertools.izip_longest(hers,digi): print item
结果:
('A', 1) ('B', 2) ('C', 0) ('D', None)
0x04:组合生成器
这一部分包括如下部分[1] product
itertools.product(*iterables[, repeat])*iterables为迭代器(对象)
repeat为迭代次数,默认为1
作用:对迭代对象中元素进行笛卡尔积运算
import itertools digi=[1,2] hers=["A"] for item in itertools.product(digi,repeat=2): print item print "\n" for item in itertools.product(digi,hers): print item print "\n" for item in itertools.product(digi,hers,repeat=2): print item
结果:
(1, 1) (1, 2) (2, 1) (2, 2) (1, 'A') (2, 'A') (1, 'A', 1, 'A') (1, 'A', 2, 'A') (2, 'A', 1, 'A') (2, 'A', 2, 'A')
[2] permutations
itertools.permutations(iterable[, r])iterable是迭代器(对象)
r是迭代长度,默认为可获得的最大长度迭代
作用:返回连续长度为r的的迭代器(对象)
import itertools digi=[1,2,3] for item in itertools.permutations(digi,2): print item for item in itertools.permutations(range(3)): print item
结果:
(1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2) (0, 1, 2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2, 1, 0)
combinations和combinations_with_replacement都与上面已经说明过得有点相似,不再单独阐述:
itertools.combinations(iterable, r)
import itertools digi=[1,2,3] for item in itertools.combinations(digi,2): print item print "\n" for item in itertools.combinations(range(3),2): print item
结果:
(1, 2) (1, 3) (2, 3) (0, 1) (0, 2) (1, 2)
itertools.combinations_with_replacement(iterable, r)
import itertools digi=[1,2,3] for item in itertools.combinations_with_replacement(digi,2): print item
结果:
(1, 1) (1, 2) (1, 3) (2, 2) (2, 3) (3, 3)
0x05:后记
有了以上itertools的了解,应该可以处理一些简单的迭代功能的应用了,涉及到具体功能的实现(如爆破字典生成),就只能再结合其他的一些知识,具体问题具体分析了。相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- 设计模式之行为型模式 - 调用行为的传递问题
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例