聊聊python中的循环遍历
python之循环遍历
关于循环遍历大家都知道,不外乎for和while,今天我在这写点不一样的循环和遍历。在实践中有时会遇到删除列表中的元素,那么循环遍历列表删除指定元素该怎么做呢?
还是直接上代码看案例吧:
importtime #删除下面列表中所有张姓元素,输出的结果应该是['李老大','李老二'] lst=['张老大','张老二','李老大','张老三','李老二']*10000 #直接for循环遍历列表,remove需要删除的元素 defdel1(lst): foriinlst: ifi[0]=='张': lst.remove(i)#在删lst[0]'张老大'的时候,列表长度变成4,导致lst[1]取值成了'李老大',跳过了'张老二' returnlst#返回的结果不符合预期 #正向遍历,通过建一个原列表的副本,然后遍历副本,删除原列表中的元素 defdel2(lst): lst2=lst.copy()#创建副本内存和时间开销大 foriinlst2: ifi[0]=='张': lst.remove(i)#删除第一个匹配的元素,检索匹配时间开销大 returnlst#结果虽然正确,但效率极低,不要用这种方法 #使用高阶函数filter方法 defdel3(lst): defcomp(n):#创建过滤函数 returnn[0]!='张'#对于首字符不是'张'的元素返回True,予以保留。若返回False的予以删除。 returnlist(filter(comp,lst))#filter高阶函数删除列表中的元素, #删除条件是comp方法,返回的是迭代器,需要list方法转成列表 #倒序删除法 defdel4(lst): foriinrange(len(lst)-1,-1,-1):#注意len(lst)必须-1,因为列表元素下标是0至len(lst)-1;注意for循环左开右闭, #从lst队尾循环到开头必须是-1,写0会漏了lst[0];-1表示倒序排列。range实际就是int数字列表生成式,在这实际生成的是 #[49999,49998,..1,0],通过下标访问列表的指定元素。 iflst[i][0]=='张': dellst[i] returnlst #倒序删除之while循环,效果和for序号一致,运行效率差别极其微小(for序号方法内存开销略大一点点)。while循环需要写7行, #for循环只要5行,更推荐使用for循环。但while循环代码阅读起来更易懂。 defdel5(lst): length=len(lst)-1 whilelength>=0: iflst[length][0]=='张': dellst[length] length-=1 returnlst #lst=del1(lst)#del1方法直接遍历列表删除指定元素,返回结果错误 #print(lst) #t1=time.time() #lst=del2(lst)#del2方法通过创建原列表副本,遍历副本删除原件中的指定元素,返回结果正确,但是运行效率极低 #t2=time.time() #print(f"遍历方法删除元素用时:{t2-t1:.5f}")#4.51529,在这可以看到代码优化的必要性,运行结果虽然一致但性能差别极大。 #评价性能一般看2个指标,1是时间消耗,2是资源消耗(通常指内存消耗,特殊场合还有别的资源消耗)。 t1=time.time() lst=del3(lst) t2=time.time() print(f"filter方法删除元素用时:{t2-t1:.5f}")#0.00596 #t1=time.time() #lst=del4(lst) #t2=time.time() #print(f"遍历方法删除元素用时:{t2-t1:.5f}")#0.07991 #t1=time.time() #lst=del5(lst) #t2=time.time() #print(f"遍历方法删除元素用时:{t2-t1:.5f}")#0.08516
以上案例注释非常详细,初学者可以阅读参考。其中del4()for循环和del5()while循环时间消耗几乎一致,for循环内存消耗略大一点点。for循环可以比while循环少写2行代码,学python用python在同样性能指标下自然是代码行数越少越好,写循环优先考虑for。
另外提一句,使用filter高阶函数运行速度是for或while的13-15倍,因为filter实际执行的是c代码。在python中有很多内置方法实际是c代码,用好了会大大提高运行效率。虽然python是公认的开发效率高运行效率低,但是只要针对运算量极大的循环执行代码块进行恰当优化(通常就是使用这种c代码的内置方法,有能力的也可以自定义c代码方法,或者是第三方的c代码方法),python性能并不弱多少,而开发效率提升很多,所以python会这么流行。
以上就是聊聊python中的循环遍历的详细内容,更多关于python循环遍历的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。