一边遍历列表一边删除

阅读: 评论:0

一边遍历列表一边删除

一边遍历列表一边删除

错误的做法1:

n = [1,2,3,4,5,6,7,8,9,10]
for x in ve(x)
print(n)

运行结果:

[2, 4, 6, 8, 10]

原因很简单,for会去获取列表的迭代器,每次循环时按次序获取内容,这次取n下次循环就取n+1,但是循环体中对列表做remove操作,导致每次循环列表中的元素都会前移一位,也就是n+1变为了n,而n+2变为了n+1。

错误的做法2:

n = [1,2,3,4,5,6,7,8,9,10]
for x in range(len(n)):m = n[ve(m)
print(n)

运行结果:

Traceback (most recent call last):File "d:/mytest.py", line 3, in <module>m = n[x]
IndexError: list index out of range

原因也很简单,n中元素越来越少而x的数字却越来越大,此消彼长当循环进行到一半的时候,就会出现数组下标越界的。

正确的做法1:

n = [1,2,3,4,5,6,7,8,9,10]
for x in n[:]:n.remove(x)
print(n)

运行结果:

[]

代码中遍历的是n列表的复制品,从复制品中依次取出每一个元素,将n中对应的内容删除掉。

正确的做法2:

n = [1,2,3,4,5,6,7,8,9,10]
for x in range(len(n)):m = n[ve(m)
print(n)

运行结果:

[]

无论循环进行到哪一步,永远只删除当前列表的第一个元素,不使用不断增加的循环变量就不会出现数组下标越界了。

实际案例,通过两个质因数列表,计算最大公约数:

m = [2,3,3,3] # 54
n = [2,2,3] #12
result = 1
for x in m[:]:if x in n:result *= xm.remove(ve(x)
print(result)

或者:

m = [2,3,3,3] # 54
n = [2,2,3] #12
result = 1
for x in range(len(m)):r = m[0]if r in n:result *= rn.remove(ve(r)
print(result)

 

本文发布于:2024-01-30 16:23:36,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170660301921304.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:遍历   列表
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23