迭代列表时从列表中删除
迭代列表并删除元素时,Python 的行为可能会令人费解。下面的代码片段:
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
输出 [0, 2, 3, 5, 6, 8, 9],而不是预期的 [0, 2, 4, 6, 8]。
了解迭代删除行为
此输出来自 Python 在迭代过程中处理可变序列的方式的结果。当调用remove时,底层列表被修改。然而,迭代器保持不变,并继续遍历修改后的列表。
下图说明了删除过程:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 0; remove? no ^ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 1; remove? yes ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 3; remove? no ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 4; remove? yes ^ [0, 2, 3, 5, 6, 7, 8, 9] <- b = 6; remove? no ^ [0, 2, 3, 5, 6, 7, 8, 9] <- b = 7; remove? yes ^ [0, 2, 3, 5, 6, 8, 9] <- b = 9; remove? no ^
解决剩余问题
以上是为什么在迭代过程中从 Python 列表中删除元素会产生意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!