Python遍历列表时添加元素为何陷入无限循环?
为什么你的Python循环会无限运行?
嘿,这个问题我之前帮朋友排查过,其实核心原因和Python遍历列表的底层机制有关,我给你掰碎了说:
核心问题:你在迭代列表的同时修改了它本身
当你写for v in values的时候,Python并不是先把values里的元素全部存起来再慢慢遍历——它是直接跟着原列表的实时动态走的。咱们一步步捋你的代码执行流程:
- 初始状态:
values = [2,3,4],列表长度是3; - 第一次循环:取出第一个元素
2,执行values.append([v,255,255]),此时values变成[2,3,4, [2,255,255]],长度变成4; - 第二次循环:取出第二个元素
3,append后列表长度变成5; - 第三次循环:取出第三个元素
4,append后列表长度变成6; - 关键来了!循环根本不会停——因为现在列表有6个元素,迭代器会继续去取第4个元素(就是你刚加的那个
[2,255,255]),然后又执行append,列表长度再加1... - 这么往复下去,每次循环都给列表加新元素,迭代器永远有下一个元素可以拿,循环自然就无限跑下去了。
快速解决方法
要避免这种情况,你只需要迭代原列表的副本,让迭代的对象和你修改的原列表分开就行。比如:
values = [2,3,4] # 两种方式都能创建原列表的副本 for v in list(values): # 或者用 values.copy() # for v in values.copy(): values.append([v,255,255])
这样循环只会遍历初始的3个元素,后续的append操作不会影响迭代的过程,循环就能正常结束啦。
内容的提问来源于stack exchange,提问作者qiliux
相关产品推荐
相关产品推荐

