Python3之itertools模块
Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。
1、Infinite Iterators
| Iterator | Arguments | Results | Example |
|---|---|---|---|
|
|
start, [step] |
start, start+step, start+2*step, ... |
|
|
|
p |
p0, p1, ... plast, p0, p1, ... |
|
|
|
elem [,n] |
elem, elem, elem, ... endlessly or up to n times |
|
1.1 count
创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算(注意:此迭代器不支持长整数)
如果超出了sys.maxint,计数器将溢出并继续从-sys.maxint-1开始计算。
>>> import itertools
>>> n = itertools.count(1)
>>> for i in n:
print(i) 1
2
3
4
......
1.2 cycle
传入一个序列,无限循环下去:
>>> itertools.cycle('ABCDE')
<itertools.cycle object at 0x00000000033576C8>
>>> for i in itertools.cycle('ABCDE'):
print(i)
A
B
C
D
E
A
B
.....
1.3 repeat
创建一个迭代器,重复生成object,times(如果已提供)指定重复计数,如果未提供times,将无止尽返回该对象。
>>> s = itertools.repeat('ABC',4)
>>> s
repeat('ABC', 4)
>>> for i in s:
print(i)
ABC
ABC
ABC
ABC
>>>
2、Iterators terminating on the shortest input sequence
|
Iterator |
Arguments |
Results |
Example |
|---|---|---|---|
|
|
p [,func] |
p0, p0+p1, p0+p1+p2, ... |
|
|
|
p, q, ... |
p0, p1, ... plast, q0, q1, ... |
|
|
|
iterable |
p0, p1, ... plast, q0, q1, ... |
|
|
|
data, selectors |
(d[0] if s[0]), (d[1] if s[1]), ... |
|
|
|
pred, seq |
seq[n], seq[n+1], starting when pred fails |
|
|
|
pred, seq |
elements of seq where pred(elem) is false |
|
|
|
iterable[, keyfunc] |
sub-iterators grouped by value of keyfunc(v) |
|
|
|
seq, [start,] stop [, step] |
elements from seq[start:stop:step] |
|
|
|
func, seq |
func(*seq[0]), func(*seq[1]), ... |
|
|
|
pred, seq |
seq[0], seq[1], until pred fails |
|
|
|
it, n |
it1, it2, ... itn splits one iterator into n |
|
|
|
p, q, ... |
(p[0], q[0]), (p[1], q[1]), ... |
|
2.1 chain
将多个迭代器作为参数, 但只返回单个迭代器, 它产生所有参数迭代器的内容, 就好像他们是来自于一个单一的序列.
>>> for c in itertools.chain('ABC', 'XYZ'):
... print(c)
# 迭代效果:'A' 'B' 'C' 'X' 'Y' 'Z'
2.2 groupby
返回一个产生按照key进行分组后的值集合的迭代器.
如果iterable在多次连续迭代中生成了同一项,则会定义一个组,如果将此函数应用一个分类列表,那么分组将定义该列表中的所有唯一项,key(如果已提供)是一个函数,应用于每一项,如果此函数存在返回值,该值将用于后续项而不是该项本身进行比较,此函数返回的迭代器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。
>>> for key, group in itertools.groupby('AAABBBCCAAA'):
... print(key, list(group))
...
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']
实际上挑选规则是通过函数完成的,只要作用于函数的两个元素返回的值相等,这两个元素就被认为是在一组的,而函数返回值作为组的key。如果我们要忽略大小写分组,就可以让元素'A'和'a'都返回相同的key:
>>> for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):
... print(key, list(group))
...
A ['A', 'a', 'a']
B ['B', 'B', 'b']
C ['c', 'C']
A ['A', 'A', 'a']
3、Combinatoric generators
|
Iterator |
Arguments |
Results |
|---|---|---|
|
|
p, q, ... [repeat=1] |
cartesian product, equivalent to a nested for-loop |
|
|
p[, r] |
r-length tuples, all possible orderings, no repeated elements |
|
|
p, r |
r-length tuples, in sorted order, no repeated elements |
|
|
p, r |
r-length tuples, in sorted order, with repeated elements |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.1 product(*iterables[, repeat]) 笛卡尔积
创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数。
>>> a = (1,2,3)
>>> b = ('A','B','C')
>>> c = itertools.product(a,b)
>>> for i in c:
print(i) (1, 'A')
(1, 'B')
(1, 'C')
(2, 'A')
(2, 'B')
(2, 'C')
(3, 'A')
(3, 'B')
(3, 'C')
3.2 permutations(iterable[, r]) 排列
创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省略了r,那么序列的长度与iterable中的项目数量相同: 返回p中任意取r个元素做排列的元组的迭代器
>>> a = [1, 2, 3, 4]
>>> s = [i for i in itertools.permutations(a,3)] # 从序列a中选出3个元素进行排列
>>> s
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]
>>> s_number = [i[0]*100 + i[1]*10 + i[2] for i in s] # 选出的3个数字组合成不重复的3位数
>>> s_number
[123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
>>>
3.3 combinations(iterable, r) 组合
创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序 (不带重复)
>>> a = [1, 2, 3, 4]
>>> s = [i for i in itertools.combinations(a,2)] # 从序列a中选出2个不重复的元素
>>> s
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
更多详细信息请查看官网介绍:https://docs.python.org/3.5/library/itertools.html
Python3之itertools模块的更多相关文章
- Python3 内建模块 hashlib、itertools、HTMLParser、urllib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...
- python基础系列教程——Python3.x标准模块库目录
python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...
- itertools模块
itertools模块中有很多函数,返回的是一个迭代器 参考: http://www.wklken.me/posts/2013/08/20/python-extra-itertools.html#_1
- 转:Python itertools模块
itertools Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个"无限"迭代器: >>& ...
- python, itertools模块
通过itertools模块,可以用各种方式对数据进行循环操作 1, chain() from intertools import chain for i in chain([1,2,3], ('a', ...
- itertools模块速查
学习itertools模块记住这张表就OK了 参考:http://docs.python.org/2/library/itertools.html#module-itertools Infinite ...
- Python中itertools模块
itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. ch ...
- Python:itertools模块
itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. ch ...
- Python学习笔记—itertools模块
这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...
随机推荐
- 【scala】数组和列表
一.数组Array 1.创建数组 隐式:val greetStrings = new Array[String](3); 显式:val greetStrings : Array[String] = n ...
- flask_sqlalchemy + sqlite 的一系列使用方法
如何使用在官网上有详细记录 :http://flask-sqlalchemy.pocoo.org/2.3/ 作为项目笔记,简单阐述使用方法: 1.创建flask_sqlalchemy基于sqlite的 ...
- 【河南第十届省赛-D】年终奖金
题目描述 ***公司承接了N个项目需要年底完成,每个项目有一定的难度系数.由于项目太多了,需要招聘大量的技术人员.要求每个技术人员至少完成K个项目. 考虑到有些项目之间相似性以及项目的难易程度,为了避 ...
- Huffman编码实现文件的压缩与解压缩。
以前没事的时候写的,c++写的,原理很简单,代码如下: #include <cstdio> #include <cstdlib> #include <iostream&g ...
- Tinker爬坑之路
目的 热修复去年年底出的时候,变成了今年最火的技术之一.依旧记得去年面试的时候统一的MVP,然而今年却变成了RN,热修复.这不得不导致我们需要随时掌握最新的技术.不然可能随时会被淘汰.记得刚进公司,技 ...
- 多进程(了解):守护进程,互斥锁,信号量,进程Queue与线程queue(生产者与消费者模型)
一.守护进程 主进程创建守护进程,守护进程的主要的特征为:①守护进程会在主进程代码执行结束时立即终止:②守护进程内无法继续再开子进程,否则会抛出异常. 实例: from multiprocessing ...
- 《DSP using MATLAB》示例Example7.18
代码: M = 33; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; T1 = 0.1095; T2 = 0.598; Hrs = [zeros(1,11) ...
- 【spring源码学习】springMVC之映射,拦截器解析,请求数据注入解析,DispatcherServlet执行过程
[一]springMVC之url和bean映射原理和源码解析 映射基本过程 (1)springMVC配置映射,需要在xml配置文件中配置<mvc:annotation-driven > ...
- 脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明
常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...
- 探秘VB.net中的shared与static
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huyuyang6688/article/details/28230345 简单了解了一 ...