在 Python 中,在迭代列表时修改列表可能会导致意外结果。考虑以下代码:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
此代码不是按预期删除 20 以下的数字,而是打印一个列表,其中缺少 20 以下的所有数字以及 20 本身。
问题源于这样一个事实:从列表中删除一个项目会改变后续项目的位置。随着循环的进行,正在检查的项目不再是预期的项目,因为删除的元素在列表中创建了“洞”。
例如,在初始迭代期间,1 被删除,但下一次迭代不检查2;相反,它会检查 3,因为列表已被缩短。这种行为持续下去,会导致不正确的输出。
要避免此问题,请在迭代期间使用替代方法更改列表,例如:
numbers = [n for n in numbers if n >= 20]
numbers[:] = (n for n in numbers if n >= 20)
for i, n in enumerate(numbers): if n < 20: numbers[i] = None numbers = [n for n in numbers if n is not None]
这些技术在迭代时不会修改列表的长度,确保正确的项目处理和所需的输出。
以上是为什么在迭代期间修改 Python 列表会导致意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!