迭代的模块itertools
itertools模块提供的全部是处理迭代功能的函数,他们的返回值不是list,而是迭代对象,只有在for循环的时候才会真正去计算。
使用迭代器的好处是在循环的时候才去取值,而直接返回值为list的结果会占用大量的内存,从而使用迭代器的话,使用了惰计算的方式,或者是延迟计算,从而在性能上能好很多。
在使用import的时候,具有两种方式,如下:
import itertools from itertools import *第一种是直接进行导入,在使用模块里的函数的时候,必须带有前缀itertools,然后用.进行应用
第二种是from import形式,在使用模块里的函数的时候,直接使用函数名即可,不需要带itertools的前缀
1、 迭代器imap和map的使用
itre = itertools.imap(pow,[1,2,3],[1,2,3]) print itre for i in itre: print i li = map(pow,[1,2,3],[1,2,3]) print li执行结果如下:
<itertools.imap object at 0x7fe364cf4610> 1 4 27 [1, 4, 27]从结果中可以看到,imap函数返回的是一个迭代器,而map函数返回的是一个list
2、 迭代器ifilter和filter的使用
ifil = itertools.ifilter(lambda x:x >5 ,range(10)) print ifil for i in ifil: print i ifilfalse = itertools.ifilterfalse(lambda x:x>5,range(10)) print ifilfalse for i in ifilfalse: print i li = filter(lambda x:x>5,range(10)) print li执行结果如下:
<itertools.ifilter object at 0x7fe364cf46d0> 6 7 8 9 <itertools.ifilterfalse object at 0x7fe364cf4750> 0 1 2 3 4 5 [6, 7, 8, 9]从执行结果可以看到,ifilter和filter和ifilterfalse都是起到一个过滤的作用,但是ifilter和ifilterfalse都是返回一个迭代器,而filter则是返回一个列表
3、 迭代器takewhile和dropwhile函数
take = itertools.takewhile(lambda x:x>5,[6,2,6,7,3]) for i in take: print 'this is the takewhile function ',i drop = itertools.dropwhile(lambda x:x>5,[1,2,6,7,3]) for i in drop: print 'this is the dropwhile function ',itakewhile函数表示遇到true进行收集到迭代器中,遇到false之后,退出
driopwhile函数表示遇到false的时候,跳过此元素,当true的时候收集剩余的元素,执行结果如下:
this is the takewhile function 6 this is the dropwhile function 1 this is the dropwhile function 2 this is the dropwhile function 6 this is the dropwhile function 7 this is the dropwhile function 3
4、 迭代器groupby方法
import itertools def height_alias(height): if height > 180: return 'tall' elif height < 160: return 'short' else: return 'middle' persons = [191,159,156,170,177,190,183,185] sorted(persons,key=height_alias) for m,n in itertools.groupby(persons,key=height_alias): print m print (list(n))groupby主要是将相邻的相同的元素放在一起,然后进行返回,在上述的方法中,可以看到使用sorted方法,主要是将数据进行排序,然后挑选相邻的元素将符合条件的进行输出,得到一个统计的作用,执行结果如下:
tall [191] short [159, 156] middle [170, 177] tall [190, 183, 185]
groupby(iterable [,key]): 创建一个迭代器,对iterable生成的连续项进行分组,在分组过程中会查找重复项。 如果iterable在多次连续迭代中生成了同一项,则会定义一个组,如果将此函数应用一个分类列表,那么分组将定义该列表中的所有唯一项,key(如果已提供)是一个函数,应用于每一项,如果此函数存在返回值,该值将用于后续项而不是该项本身进行比较,此函数返回的迭代器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。
5、 chain函数
主要是将几个序列进行加起来,然后返回一个迭代器,itertools.chain('kel','other')
6、 count函数
主要输出自然序列,第一个为开始的数字,第二个参数为步长,itertools.count(2,2),输出从2开始,以2为步长的无限迭代器
7、 cycle函数
主要是将一个序列无限输出,重复,itertools.cycle('kel')
8、 repeat函数
主要是进行重复一个序列,第二个参数为重复的次数 ,itertools.repeat('kel',2)表示将序列kel重复两次的迭代器
for linux and python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述