可迭代对象就像密闭容器里的水,有货倒不出 itertools是python内置的标准模块,提供了很多简洁又高效的专用功能,使用得当能够极大的简化代码行数,同时所有方法都是实现了生成器函数,这就意味着极大的节省内存。 itertools提供的功能主要分为三大块,以最新版本的3。10为例:对可迭代对象无限迭代,无限输出对可迭代对象有限迭代对可迭代对象排列组合 方法如下: 导入包fromiteratortoolsimport无限迭代 iteratortools。count(start0,step1) 数值生成器,可以指定起始位置和步长,并且步长可以为浮点数。无限输出,一直累加,在例子中需要边睡眠1s边输出。importtimeiteratorcount(4,0。5)foriiniterator:。。。print(i)。。。time。sleep(1)。。。44。55。05。56。06。57。07。5 iteratortools。cycle(iteratorable) 无限循环取出可迭代对象里的元素acycle(ABCD)importtimeforiina:。。。print(i)。。。time。sleep(1)。。。ABCDABCD iteratortools。repeat(object〔,times〕) 不断重复输出整个object,如果指定了重复次数,则输出指定次数,否则将无限重复。iteratorrepeat(helloworld,10)foriiniterator:。。。print(i)。。。helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld有了这个神器,对输出10次helloworld这种问题又有一种新解法有限迭代 iteratortools。accumulate(iteratorable〔,func,,initialNone〕) 返回对列表中元素逐项的操作,操作有:累加,返回累加到每一项的列表累乘,返回累乘到每一项的列表最小值,返回到当前项的最小值最大值,返回到当前项的最大值〔2,4,8,1,3,5〕〔2,4,8,1,3,5〕arr〔2,4,8,1,3,5〕addaccumulate(arr)list(add)〔2,6,14,15,18,23〕maxaccumulate(arr,max)list(max)〔2,4,8,8,8,8〕importoperatormulaccumulate(arr,operator。mul)list(mul)〔2,8,64,64,192,960〕minaccumulate(arr,min)list(min)〔2,2,2,1,1,1〕 iteratortools。chain(iteratorables) 将多个可迭代对象构建成一个新的可迭代对象,统一返回。类似于将多个对象链成一条串iteratorchain(〔1,2,3〕,〔a,b,c〕,(5,6,7))list(iterator)〔1,2,3,a,b,c,5,6,7〕 优点:可以将多个可迭代对象整合成一个,避免逐个取值 chain。fromiteratorable(iteratorable) 将一个迭代对象中将所有元素类似于chain一样,统一返回。chain。fromiteratorable(〔abc,def〕)iteratortools。chainobjectat0x1083ae460iteratorchain。fromiteratorable(〔abc,def〕)list(iterator)〔a,b,c,d,e,f〕 iteratortools。compress(data,selectors) 按照真值表筛选元素arr〔1,2,3,4〕selectors〔1,0,1,0〕iteratorcompress(arr,selectors)list(iterator)〔1,3〕 iteratortools。dropwhile(predicate,iteratorable) 按照条件筛选,丢弃掉第一次不符合条件时之前的所有元素arr〔1,2,3,2,1,2,1〕iteratordropwhile(lambdax:x3,arr)list(iterator)〔3,2,1,2,1〕 iteratortools。takewhile(predicate,iteratorable) 根据predicate条件筛选可迭代对象中的元素,只要元素为真就返回,第一次遇到不符合的条件就退出。 按照条件筛选,丢弃第一次遇到不符合条件之后的元素。行为类似于上一个dropwhile,区别在于丢弃的选择不同。 iteratortools。filterfalse(predicate,iteratorable) 保留不符合条件的元素,返回迭代器arr〔1,2,3,4,5〕iteratorfilterfalse(lambdax:x3,arr)list(iterator)〔3,4,5〕 iteratortools。groupby(iteratorable,keyNone) 按照指定的条件分类。输出条件和符合条件的元素iteratorgroupby(arr,lambdax:x3)forcondition,numbersiniterator:。。。print(condition,list(numbers))。。。False〔1,2,3〕True〔4,5〕 iteratortools。islice(iteratorable,start,stop〔,step〕) 对迭代器进行切片,老版本中不能指定start和stop以及步长,新版本可以。iteratorcount()sliceiteratorislice(iterator,10,20,2)list(sliceiterator)〔10,12,14,16,18〕 iteratortools。starmap(function,iteratorable) 将function作用于可迭代对象上,类似于map函数 iteratortools。tee(iteratorable,n2) 从一个可迭代对象中返回n个独立的迭代器iteratortee(arr)foriiniterator:。。。print(type(i),list(i))。。。classiteratortools。tee〔1,2,3,4,5〕classiteratortools。tee〔1,2,3,4,5〕 iteratortools。ziplongest(iteratorables,fillvalueNone) 创建一个迭代器,从每个可迭代对象中收集元素。如果可迭代对象的长度未对齐,将根据fillvalue填充缺失值。 迭代持续到耗光最长的可迭代对象。大致相当于:iteratorziplongest(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),(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),(3,1,2),(3,2,1)〕 这个方法能够完美解决算法中的全排列问题,简直是量身定做。如果早知道这么简单,当年考算法也不会,哎 可参见leetcode46题:https:leetcodecn。comproblemspermutations iteratortools。combinations(iteratorable,r) 返回由输入iteratorable中元素组成长度为r的子序列。元素不可重复使用。子序列是要求元素在排列之后和之前的相对位置不变的。1,2,3中3在1的后面,子序列中3也一定在1的后面。iteratorcombinations(〔1,2,3,4〕,r3)list(iterator)〔(1,2,3),(1,2,4),(1,3,4),(2,3,4)〕iteratorcombinations(〔1〕,r3)list(iterator)〔〕 这个方法可以曲线解决组合总数问题 https:leetcodecn。comproblemscombinationsum iteratortools。combinationswithreplacement(iteratorable,r) 返回由输入iteratorable中元素组成的长度为r的子序列,允许每个元素可重复出现itercombinationswithreplacement(〔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)〕iteratorcombinationswithreplacement(〔1〕,r3)list(iterator)〔(1,1,1)〕 原文http:www。cnblogs。comgoldsunshinep15678828。html