当前位置: 首页 > 后端技术 > Python

5个技巧让你的for循环告别复杂!

时间:2023-03-26 16:33:48 Python

或许每个初学Python的程序员在第一个概念里都有For循环,这是理所当然的事情。for循环可以毫不费力地对数据执行许多操作。但是,大量的for循环也可能让用户的思维仅限于简单的迭代,而忽略了一些更高效简洁的迭代方式。如何让你的for循环告别复杂拥抱简单,如何重启探索Python循环迭代的大门,希望以下小技巧能给你带来启发。Zip:同时循环遍历两个列表作者在实践中发现代码可以同时循环遍历两个数组。这在其他编程语言中是比较难做到的,这也体现了Python的简单性。要同时遍历两个数组,只需使用zip()函数即可。forfirst,secondinzip(array1,array2):print(first)print(second)在偶数序列和奇数序列中使用该方法可以体现该函数的功效。odds=[1,3,5,7,9]evens=[2,4,6,8,10]foroddnum,evennuminzip(odds,evens):print(oddnum)print(evennum)的输出abovefunction结果是:12345678910InRangeFunctions:WritingC-StyleLoopsC-Style可能看起来平凡,但它在循环中大放异彩。foriinrange(10):print(i)ifi==3:i.内容已经是完美的形式。然而,作者热衷于“浪费时间”,所以我决定重新编写一个迭代程序,尽可能写出一个完美的C-Style循环。classforrange:def__init__(self,startOrStop,stop=None,step=1):ifstep==0:raiseValueError('forrangestepargumentmustnotbezero')ifnotisinstance(startOrStop,int):raiseTypeError('forrangestartOrStop参数必须是int')如果stop不是None并且notisinstance(stop,int):raiseTypeError('forrangestopargumentmustbeanint')ifstopisNone:self.start=0self.stop=startOrStopself.step=stepelse:self.start=startOrStopself.stop=stopself.step=stepdef__iter__(self):returnsself.foriterator(self.start,self.stop,self.step)classforiterator:def__init__(self,开始,停止,步骤):self.currentValue=Noneself.nextValue=startself.stop=stopself.step=stepdef__iter__(self):returnselfdefnext(self):如果self.step>0且self.nextValue>=self.stop:如果self.step<0且self.nextValue<=self.stop:引发StopIterationself.currentValue=forrange.forvalue(self.nextValue,self)self.nextValue+=self.step返回self.currentValueclassforvalue(int):def__new__(cls,value,iterator):value=super(forrange.forvalue,cls).__new__(cls,value)value.iterator=迭代器返回值defupdate(self,value):ifnotisinstance(self,int):raiseTypeError('forvalue.updatevaluemustbeanint')ifself==self.iterator.currentValue:self.iterator.nextValue=value+self.iterator.stepFilter()函数:只循环需要的数据当处理大量数据时,使用filter函数可以使数据在使用filter时更好。当你只需要使用一定范围的数据,不想再添加其他条件时,Filter就非常有用。people=[{"name":"John","id":1},{"name":"Mike","id":4},{"name":"Sandra","id":2},{"name":"Jennifer","id":3}]forpersoninfilter(lambdai:i["id"]%2==0,people):...print(person)...{'name':'Mike','id':4}{'name':'Sandra','id':2}Enumerate()函数:索引维度使用Python中的枚举函数可以让Python将列表索引输出来自数组的编号。作者做了一个包含三个元素的列表来演示这个功能:l=[5,10,15]现在可以用下面的方法访问数组索引:l[1]10l[0]5l[2]15in当通过这些列表进行枚举,将维度的索引位置和维度结合起来,产生一个新的变量。注意这个新变量的类型。Python自动把这些索引放到一个元组中,这很奇怪。我仍然倾向于从只有一个元素的Python库中获得这些结果。幸运的是,我们可以将这些枚举函数放入一个Python库中。data=dict(enumerate(l))输入以上代码后,会得到:>>>data{0:5,1:10,2:15}Sorted()函数:使用数据进行排序,而不是之前使用排序功能对于经常需要处理大量数据的人来说非常重要。它把字符串按照首字母A到B排列,把整数和倍数从负无穷开始从小到大排列。请注意,此函数不能用于包含字符串和整数或浮点数的列表。l=[15,6,1,8]foriinsorted(l):print(i)16815也可以将opposite参数设置为False进行逆运算。foriinsorted(l,reverse=True):print(i)15861对于最后一个可用的参数,可以使用key函数。Key是应用于已知循环中每个维度的函数。我更喜欢使用lambda,它创建一个匿名但仍可调用的函数。l.sort(key=lambdas:s[::-1])在写代码的时候,难免会遇到数据量很大的迭代。简单使伟大,这些方法使代码简洁并运行得更快。循环世界值得你继续探索!文渊网,仅供学习,侵删。学习Python的路上肯定会遇到困难,不要慌张,我这里有一套学习资料,包括40+电子书,800+教学视频,涉及Python基础、爬虫、框架、数据分析、机学习等等,别怕你学不会!https://shimo.im/docs/JWCghr8...《Python学习资料》关注公众号【蟒圈】,每日优质文章推送。