《python自带性能强悍的标准库 itertools.docx》由会员分享,可在线阅读,更多相关《python自带性能强悍的标准库 itertools.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、python自带性能强悍的标准库itertools可迭代对象就像密闭容器里的水有货倒不出itertools是python内置的标准模块提供了很多简洁又高效的专用功能使用得当可以极大的简化代码行数同时所有方法都是实现了生成器函数这就意味着极大的节省内存。itertools提供的功能主要分为三大块以最新版本的3.10为例对可迭代对象无限迭代无限输出对可迭代对象有限迭代对可迭代对象排列组合方法如下导入包fromiteratortoolsimport*无限迭代iteratortools.count(start0,step1)数值生成器可以指定起始位置以及步长,并且步长可以为浮点数。无限输出一直累加在例
2、子中需要边睡眠1s边输出。importtimeiteratorcount(4,0.5)foriiniterator:.print(i).time.sleep(1).44.55.05.56.06.57.07.5iteratortools.cycle(iteratorable)无限循环取出可迭代对象里的元素acycle(ABCD)importtimeforiina:.print(i).time.sleep(1).ABCDABCDiteratortools.repeat(object,times)不断重复输出整个object假如指定了重复次数那么输出指定次数否那么将无限重复。iteratorrepe
3、at(helloworld,10)foriiniterator:.print(i).helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld有了这个神器对输出10次helloworld这种问题又有一种新解法有限迭代iteratortools.accumulate(iteratorable,func,*,initialNone)返回对列表中元素逐项的操作操作有累加返回累加到每一项的列表累乘返回累乘到每一项的列表最小值返回到当前项的最小值最大值返回到当前项
4、的最大值2,4,8,1,3,52,4,8,1,3,5arr2,4,8,1,3,5addaccumulate(arr)list(add)2,6,14,15,18,23maxaccumulate(arr,max)list(max)2,4,8,8,8,8importoperatormulaccumulate(arr,operator.mul)list(mul)2,8,64,64,192,960minaccumulate(arr,min)list(min)2,2,2,1,1,1iteratortools.chain(*iteratorables)将多个可迭代对象构建成一个新的可迭代对象统一返回。类似于
5、将多个对象链成一条串iteratorchain(1,2,3,a,b,c,(5,6,7)list(iterator)1,2,3,a,b,c,5,6,7优点可以将多个可迭代对象整合成一个防止逐个取值chain.from_iteratorable(iteratorable)将一个迭代对象中将所有元素类似于chain一样统一返回。chain.from_iteratorable(abc,def)iteratortools.chainobjectat0x1083ae460iteratorchain.from_iteratorable(abc,def)list(iterator)a,b,c,d,e,fite
6、ratortoolspress(data,selectors)按照真值表挑选元素arr1,2,3,4selectors1,0,1,0iteratorcompress(arr,selectors)list(iterator)1,3iteratortools.dropwhile(predicate,iteratorable)按照条件挑选丢弃掉第一次不符合条件时之前的所有元素arr1,2,3,2,1,2,1iteratordropwhile(lambdax:x3,arr)list(iterator)3,2,1,2,1iteratortools.takewhile(predicate,iterator
7、able)根据predicate条件挑选可迭代对象中的元素只要元素为真就返回第一次遇到不符合的条件就退出。按照条件挑选丢弃第一次遇到不符合条件之后的元素。行为类似于上一个dropwhile区别在于丢弃的选择不同。iteratortools.filterfalse(predicate,iteratorable)保存不符合条件的元素返回迭代器arr1,2,3,4,5iteratorfilterfalse(lambdax:x3,arr)list(iterator)3,4,5iteratortools.groupby(iteratorable,keyNone)按照指定的条件分类。输出条件以及符合条件的
8、元素iteratorgroupby(arr,lambdax:x3)forcondition,numbersiniterator:.print(condition,list(numbers).False1,2,3True4,5iteratortools.islice(iteratorable,start,stop,step)对迭代器进展切片老版本中不能指定start以及stop和步长新版本可以。iteratorcount()slice_iteratorislice(iterator,10,20,2)list(slice_iterator)10,12,14,16,18iteratortools.s
9、tarmap(function,iteratorable)将function作用于可迭代对象上类似于map函数iteratortools.tee(iteratorable,n2)从一个可迭代对象中返回n个独立的迭代器iteratortee(arr)foriiniterator:.print(type(i),list(i).classiteratortools._tee1,2,3,4,5classiteratortools._tee1,2,3,4,5iteratortools.zip_longest(*iteratorables,fillvalueNone)创立一个迭代器从每个可迭代对象中采集元
10、素。假如可迭代对象的长度未对齐将根据fillvalue填充缺失值。迭代持续到耗光最长的可迭代对象。大致相当于iteratorzip_longest(ABCD,xy,fillvalue-)list(iterator)(A,x),(B,y),(C,-),(D,-)排列组合迭代iteratortools.product(*iteratorables,repeat1)生成多个可迭代对象的笛卡尔积大致相当于生成器表达式中的嵌套循环。例如product(A,B)以及(x,y)forxinAforyinB)返回结果一样。iteratorproduct(123,abc)list(iterator)(1,a),
11、(1,b),(1,c),(2,a),(2,b),(2,c),(3,a),(3,b),(3,c)将可选参数repeat设定为要重复的次数。例如product(A,repeat4)以及product(A,A,A,A)是一样的iteratortools.permutations(iteratorable,rNone)由iteratorable元素生成长度为r的排列。元素的排列类似于给一个1,2,3选取其中两个元素一共有多少种组合方法不要求元素排列之后的位置。iterpermutations(1,2,3,r3)list(iterator)(1,2,3),(1,3,2),(2,1,3),(2,3,1),
12、(3,1,2),(3,2,1)这个方法可以完美解决算法中的全排列问题简直是量身定做。假如早知道这么简单当年度考算法也不会。哎可参见leetcode46题力扣iteratortoolsbinations(iteratorable,r)返回由输入iteratorable中元素组成长度为r的子序列。元素不可重复使用。子序列是要求元素在排列之后以及之前的相对位置不变的。123中3在1的后面子序列中3也一定在1的后面。iteratorcombinations(1,2,3,4,r3)list(iterator)(1,2,3),(1,2,4),(1,3,4),(2,3,4)iteratorcombinati
13、ons(1,r3)list(iterator)这个方法可以曲线解决组合总数问题iteratortoolsbinations_with_replacement(iteratorable,r)返回由输入iteratorable中元素组成的长度为r的子序列允许每个元素可重复出现itercombinations_with_replacement(1,2,3,4,r2)list(iter)(1,1),(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,3),(3,4),(4,4)iteratorcombinations_with_replacement(1,r3)list(iterator)(1,1,1)