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. cv2.matchTemplate()函数的应用,匹配图片后画出矩形

    import cv2 as cv import numpy as np """ matchTemplate(): 参数image:待搜索的图像(大图) 参数temple: ...

  2. 【BZOJ4029】[HEOI2015]定价(贪心)

    [BZOJ4029][HEOI2015]定价(贪心) 题面 BZOJ 洛谷 题解 每次加上十进制下的\(lowbit\)就行了??? #include<iostream> #include ...

  3. TortoiseSVN版本管理的注意点

    @2019-04-18 [小记] 1.强烈建议以项目(功能区别较大(单.双机做两个版本))为区别单独版本管理,这样可保证工程的延续性(能更好的使用更新.提交等功能)及避免后期提交时的混乱(.svn信息 ...

  4. vscode常用插件

    vscode写JS/html/css是比较适合的,因为轻量级. 只是需要一些插件来完善VSCODE功能,感觉VSCODE就是要靠插件的,不然的话,只是一个高级的代码编辑器.可能比editplus&qu ...

  5. pwn-GUESS

    参考了其他wp之后才慢慢做出来的 记录一下 首先checksec一下 有canary 放到IDA看下源码 运行流程大概是 有三个fork 即三次输入机会,于是无法爆破cannary 本题用的是SSP ...

  6. 处理 Vue 单页面应用 SEO

    由于在vue单页应用中title只设定在入口文件index.html,如果切换路由,title怎么更换? 在路由router中设置meta: { path:'/chooseBrand', compon ...

  7. centos7通过nginx搭建SSL

    今天给大家带来的是一篇关于通过nginx搭建HTTPS访问转跳后端HTTP的教程,部署方式如下: 安装基础组件yum -y isntall firewalldyum -y install gcc gc ...

  8. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  9. Android项目打包遇com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details

    查了网上很多处理都是在项目的gradle.properties中添加下面的配置,再编译就通过了: android.enableAapt2=false

  10. mysql8用户管理

    查看当前登录用户: 创建用户: create user '用户名'@'主机地址' identified with mysql_native_password by '密码'; 修改密码: alter ...