Python的秘密生活:漏洞
发布: (2026年1月17日 GMT+8 12:01)
2 min read
原文: Dev.to
Source: Dev.to
在遍历列表时修改列表的陷阱(以及如何修复)
Timothy 正盯着屏幕上的传感器数据列表。
“我已经让它删除错误了。我明确写了代码。但它总是漏掉它们。”
他有一个温度读数列表,其中任何低于零的值都被视为错误。他的循环如下:
# Timothy's "Cleanup" Loop
temperatures = [10, -5, -2, 15, 20]
for temp in temperatures:
if temp = 0]
print(f"Cleaned List: {clean_temperatures}")
输出
Cleaned List: [10, 15, 20]
这种做法完全避免了就地修改,通常更快且更清晰。
Margaret 的速查表
- 陷阱: 在循环 期间 切勿向列表添加或删除项目。
- 症状: 删除时出现跳过的项目,添加时出现无限循环。
- 原因: 改变列表长度会导致索引移动,而循环计数器仍然向前推进。
修复方法
- 遍历副本:
for item in my_list[:](快速修复)。 - 列表推导式:
[x for x in my_list if condition](过滤的最佳选择)。 - 逆向遍历:
for item in reversed(my_list):(进阶用法;在必须就地修改且不想复制时很有用)。