https://docs.python.org/3.6/library/itertools.html

一无限迭代器:

Iterator Arguments Results Example

count()

start, [step]

start, start+step, start+2*step, ...

count(10) --> 10 11 12 13 14 ...

cycle()

p

p0, p1, ... plast, p0, p1, ...

cycle('ABCD') --> A B C D A B C D ...

repeat()

elem [,n]

elem, elem, elem, ... endlessly or up to n times

repeat(10, 3) --> 10 10 10  

  • itertools.count(arg1,arg2):arg1:开始位置,arg2:步长
 #相当于for i in range(,)

 #创建迭代器,从10开始步长为2,无结束

 >>> import itertools
>>> n = itertools.count(,)
>>> print(type(n))
<class 'itertools.count'>
>>> for i in n:
print(i)

itertools.count()

  • itertools.cycle(itertable)
 生成一个无限循环可迭代参数的迭代器
>>> itertools.cycle('ABCDE')
<itertools.cycle object at 0x00000000033576C8>
>>> for i in itertools.cycle('ABCDE'):
print(i) #ABCDEABCDE.......

itertools.cycle()

  • itertools.repeat(arg1,arg2):arg1:要重复的参数,arg2:重复多少遍
 >>> s = itertools.repeat('ABC',)
>>> s
repeat('ABC', )
>>> for i in s:
print(i)
#ABC
#ABC
#ABC

itertools.repeat()

二处理输入序列迭代器

迭代器 参数 结果
accumulate() p [,func] p0,p0 + p1,p0 + p1 + p2,... accumulate([1,2,3,4,5]) --> 1 3 610 15
chain() p,q,... p0,p1,... plast,q0,q1,... chain('ABC', 'DEF') --> A B C D EF
chain.from_iterable() 迭代 p0,p1,... plast,q0,q1,... chain.from_iterable(['ABC','DEF']) --> A B C D E F
compress() 数据,选择器 (d [0]如果s [0]),(d [1]如果s [1]),...... compress('ABCDEF', [1,0,1,0,1,1])--> A C E 

dropwhile()

pred,seq seq [n],seq [n + 1],当pred失败时开始 dropwhile(lambda x: x<5,[1,4,6,4,1]) --> 6 4 1
filterfalse() pred,seq seq的元素,其中pred(elem)是假的 filterfalse(lambda x: x%2,range(10)) --> 0 2 4 6 8
groupby() 可迭代的[,关键] 按键值(v)分组的子迭代器  
islice() seq,[start,] stop [,step] 来自seq [start:stop:step]的元素 islice('ABCDEFG', 2, None) --> CD E F G
starmap() func,seq func(* seq [0]),func(* seq [1]),... starmap(pow, [(2,5), (3,2),(10,3)]) --> 32 9 1000
takewhile() pred,seq seq [0],seq [1],直到pred失败 takewhile(lambda x: x<5,[1,4,6,4,1]) --> 1 4
tee() 它,n it1,it2,... itn将一个迭代器拆分为n  
zip_longest() p,q,... (p [0],q [0]),(p [1],q [1]),... zip_longest('ABCD', 'xy',fillvalue='-') --> Ax By C- D-
  • itertools.accumulate(terable ,func )

    创建一个迭代器,返回累积的总和,或其他二进制函数的累计结果(通过可选的func参数指定 )。如果提供了func,它应该是两个参数的函数。输入可迭代的 元素可以是可以被接受为func的参数的任何类型,如果输入iterable为空,则输出iterable也将为空。

 >>> import operator
>>> n=itertools.accumulate([,,,])
>>> for i in n:
... print(i)# >>> n=itertools.accumulate([,,,],func=operator.mul)
>>> for i in n:
... print(i) #

itertools.accumulate()

  • itertools.chain(*iterable)
 将俩个可迭代对象缝合起来,生成一个迭代器
>>> n=itertools.chain('abc','def')
>>> for i in n:
... print(i)
...
a
b
c
d
e
f

itertools.chain()

  • classmethod chain.from_iterableiterable )对于一个可迭代的数据生成一个迭代器
 >>> for i in itertools.chain.from_iterable(["abc","def"]):
... print(i)
...
a
b
c
d
e
f
  • itertools.compress(data, selectors) :选择那些字符作为迭代器内容
 #选择那些字符输出
>>> for i in itertools.compress("ABCDEFG",[,,,,,,]):
... print(i)
...
A
C
D
E

itertools.compress()

  • itertools.dropwhile(pred,seq):当不满足pred条件时,截取后面的数据做为迭代器内容
 dropwhile(lambda x: x<, [,,,,]) -->   
  • itertools.groupby(iterable,key)

  返回一个产生按照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']

itertools.group()

  • itertools.starmap(func,seq)
 starmap(pow, [(,), (,), (,)]) -->   
  • itertools.tee(iterable,n)
 >>> for i in itertools.tee([,,],):
... for x in i:
... print(x)
...

三:组合迭代器

product() p, q, … [repeat=1] cartesian product, equivalent to a nested for-loop
permutations() p[, r] r-length tuples, all possible orderings, no repeated elements
combinations() p, r r-length tuples, in sorted order, no repeated elements
combinations_with_replacement() p, r r-length tuples, in sorted order, with repeated elements
product('ABCD', repeat=2)   AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations('ABCD', 2)   AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2)   AB AC AD BC BD CD
combinations_with_replacement('ABCD', 2)   AA AB AC AD BB BC BD CC CD DD
  • itertools.product(*iterables[, repeat]) 笛卡尔积

      创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数

 b=('a','b'.'c'),a=(,,),c=('d','e','f')
>>> c=itertools.product(a,b,c)
>>> for i in c:
... print(i)
(, 'a', 'd')
(, 'a', 'e')
(, 'a', 'f')
(, 'b', 'd')
(, 'b', 'e')
(, 'b', 'f')
(, 'c', 'd')
(, 'c', 'e')
(, 'c', 'f')
(, 'a', 'd')
(, 'a', 'e')
(, 'a', 'f')
(, 'b', 'd')
(, 'b', 'e')
(, 'b', 'f')
(, 'c', 'd')
(, 'c', 'e')
(, 'c', 'f')
(, 'a', 'd')
(, 'a', 'e')
(, 'a', 'f')
(, 'b', 'd')
(, 'b', 'e')
(, 'b', 'f')
(, 'c', 'd')
(, 'c', 'e')
(, 'c', 'f')
  • itertools.permutation(iterable[, r]),按指定每个元素长度,返回所有有重复的排列,但不允许一个元素中有相同要的子元素
 >>> a = [, , , ]
>>> s = [i for i in itertools.permutations(a,)] # 从序列a中选出3个元素进行组合排列
>>> s
[(, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , ), (, , )]
 >>> from itertools import permutations
>>> print permutations(['','',''])
<itertools.permutations object at 0x02A45210>
>>>
>>> print list(permutations(['','','']))
[('', '', ''), ('', '', ''), ('', '', ''), ('', '', ''), ('', '', ''), ('', '', '')]
>>>
>>> print list(permutations(['','',''],))
[('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', '')]
>>>
>>> print list(permutations('abc',))
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
  • itertools.combinations(iterable, r) 按指定长度,返回所有无重复组合,且每个元素中的子元素不能重复(如AA不可以)
 >>> a = [, , , ]
>>> s = [i for i in itertools.combinations(a,)] # 从序列a中选出2个不重复的元素
>>> s
[(, ), (, ), (, ), (, ), (, ), (, )]
  •  itertools.combinations(iterable,r):和上面的一样,只是允许每个元素中的子元素可以相同(AA可以)
 >>> from itertools import combinations_with_replacement
>>>
>>> print list(combinations_with_replacement('',))
[('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', '')]
>>>
>>> A = [,,,,]
>>> print list(combinations(A,))
[(, ), (, ), (, ), (, ), (, ), (, ), (, ), (, ), (, ), (, )]

python迭代器Itertools的更多相关文章

  1. python基础===Python 迭代器模块 itertools 简介

    本文转自:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  2. python迭代器与iter()函数实例教程

    python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...

  3. python 之 itertools模块

    官方:https://yiyibooks.cn/xx/python_352/library/itertools.html 参考: https://blog.csdn.net/neweastsun/ar ...

  4. Python 迭代器和生成器(转)

    Python 迭代器和生成器 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的, ...

  5. python基础=== itertools介绍(转载)

    原文链接:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  6. Python中itertools.groupby分组的使用

    Python中itertools.groupby分组的使用 有时候我们需要给一个列表按照某个属性分组,可以借助groupby来实现. 比如:一下列表我想以严重程度给它分组,并求出每组的元素个数. fr ...

  7. 【Python开发】Python:itertools模块

    Python:itertools模块 itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器 ...

  8. Python迭代器,可迭代对象,生成器

    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...

  9. Python 迭代器和列表解析

    Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...

随机推荐

  1. mysql生成20万条数据(连表插入)

    创建一个存储过程 DELIMITER $$ -- 设置定界符为$$,与';'意思相同,防止相同符号产生冲突 USE `yunkc_base1`$$ -- 使用数据库 DROP PROCEDURE IF ...

  2. kubernetes 1.14安装部署dashboard

    简单介绍: Dashboard是一个基于web的Kubernetes用户界面.您可以使用Dashboard将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障诊断,并管理集群资源. ...

  3. (十四)QFile操作,QByteArray,文件流操作,QTextStream,QDataStream,QFileInfo, QIODevice

    QFile f 1.readall #include "widget.h" #include "ui_widget.h" #include <QFileD ...

  4. virtualbox+ubuntu

    https://jingyan.baidu.com/article/7f766daff541cd4101e1d0cd.html ubuntu 安装 这台计算机似乎没有安装操作系统 待解决 注意ubun ...

  5. 20175221 《Java程序设计》第8周学习总结

    20175221   <Java程序设计>第8周学习总结 教材学习内容总结 第十五章主要内容有:泛型.链表.堆栈.散列映射.树集以及树映射. 泛型: 声明:可以使用class名称<泛 ...

  6. ModBus-RTU详解

      Modbus 一个工业上常用的通讯协议.一种通讯约定.Modbus协议包括RTU.ASCII.TCP.其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现.虽然RTU比较简单,但是看协议 ...

  7. 计算机网络之JSONP跨域

    JSONP跨域实现原理 百度联想词跨域实现 一.JSONP跨域实现原理 1.Web页面使用<script>引入JS文件时不受同源策略的影响.准确的说,所有拥有src属性的标签都不受同源策略 ...

  8. [Luogu P2966][BZOJ 1774][USACO09DEC]牛收费路径Cow Toll Paths

    原题全英文的,粘贴个翻译题面,经过一定的修改. 跟所有人一样,农夫约翰以宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道 ...

  9. MDK调试无法进入main()函数

    今天在用MDK调试stm32时出现了无法进入main函数,进入startup文件的情况. 在网上查找资料时发现,MDK调试设置断点最多只能设置5个.在减少断点后,调试果然能够正常进入main()函数了 ...

  10. docker安装elasticsearch

    docker search elasticsearch 选择一个版本,拉取镜像 docker pull elasticsearch: 查看镜像 docker images 通过镜像,启动一个容器,并将 ...