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. Heap Partition ZOJ - 3963(贪心)

    ZOJ - 3963 贪心做一下就好了 反正别用memset #include <iostream> #include <cstdio> #include <sstrea ...

  2. mobilebone与weiui_example.css 使用问题

    weiui_example.css 原page样式属性opacity设置为0 ... 由于我采取的是使用mobilebone,没按照weui官网的来搞这种效果,所以这里会有冲突,设置为默认即可,即op ...

  3. 小白月赛13 小A与小B (双向BFS)

    链接:https://ac.nowcoder.com/acm/contest/549/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  4. Pushgateway 介绍

    Pushgateway是一个独立的服务,Pushgateway位于应用程序发送指标和Prometheus服务器之间. Pushgateway接收指标,然后将其作为目标被Prometheus服务器拉取. ...

  5. C语言博客05--指针

    C语言博客05--指针 1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 在本周的学习过程中,我们学习了指针的用法.说实话,指针的用法有点绕,之前一直没搞 ...

  6. Guest Editors’ Introduction: Special Issue on Advances in Management of Softwarized Networks

    文章名称:Guest Editors’ Introduction:Special Issue on Advances in Management of Softwarized Networks 发表时 ...

  7. mix-blend-mode

    mix-blend-mode是一个css3新增的混合color与背景元素颜色的样式,同一个元素的两个颜色不影响. mix-blend-mode: normal;          //正常mix-bl ...

  8. use case 的缺陷

    用use case 获取需求的方法是否有什么缺陷,还有什么地方需要改进? 1.故事/人物/场景非常适合交互式的系统,但是对于其他类型的需求(算法,速度,扩展性,安全性,以及和      系统技术相关的 ...

  9. webpack的按需引入配置

    ant.design插件需要less配合,yarn add babel-plugin-import,webpack4.0的babel文件已经配置到webpackconfig.js中,需要eject暴露 ...

  10. centos 7.2 安装mongodb 3.4.4免编译

    /根目录下: 获取命令: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.4.tgz 解压命令: tar zvxf mon ...