在 Python 中迭代删除项目时的奇怪行为
在 Python 中,在迭代期间从列表中删除项目时可能会出现奇怪的结果。考虑以下代码:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
预期输出:[20, 21, ..., 49]
实际输出:[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, ..., 49]
原因:
问题源于在迭代列表时修改列表。在第一次循环迭代期间,1 被删除。但是,后续迭代不再指向缩短列表中的 2,而是指向 3。这样一直持续到只剩下大于 20 的元素。
解决方案:
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: print("do something") numbers[i] = None numbers = [n for n in numbers if n is not None]
需要注意的是,通常不建议在迭代期间修改列表的长度。所提供的解决方案提供了实现预期结果的替代方法。
以上是为什么从 Python 列表中迭代删除项目会产生意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!