为什么python中不建议在for循环中修改列表

 我来答
百度网友10a24bf
2017-07-08 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:95%
帮助的人:2953万
展开全部
对这个list进行操作。

a = [1, 2, 3, 4, 5, 6]

首先,将里面值为3的元素修改为4。我们可以写成这样。

for i in range(len(a)):
if a[i] == 3:
a[i] = 4

或者这样

for i, v in enumerate(a):
if v == 3:
a[i] = 4

结果变成了这样:

a = [1, 2, 4, 4, 5]

好像用for循环完成得挺顺利的,但是列表的修改,不仅限于对值得修改,还有插入和删除。

接着上一步,我们现在要尝试删除里面所有值为4的元素。

for i, v in enumerate(a):
if v == 4:
del a[i]

然而,得到却是

a = [1, 2, 4, 5]

如果写成这样

for i in range(len(a)):
if a[i] == 4:
del a[i]

python直接就报错了

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range

由于在遍历的过程中,删除了其中一个元素,导致后面的元素整体前移,导致有个元素成了漏网之鱼。同样的,在遍历过程中,使用插入操作,也会导致类似的错误。这也就是问题里说的无法“跟踪”元素。

如果使用while,则可以在面对这样情况的时候灵活应对。同样是上面那个例子。

i = 0
while i < len(a):
if a[i] == 4:
del a[i]
else:
i += 1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式