python - 迭代时从列表中删除时会跳过迭代

标签 python list

我不确定我是否遗漏了一些东西,但我对此感到困惑。我正在迭代列表并根据条件删除一些元素。当条件满足时,它会跳过下一次迭代。例如:

l = [1,1,2,3,1]
for i in l:
    print(f'checking {i} in {l}')
    if i == 1:
        print(f'removing')
        l.remove(i)

这会返回

checking 1 in [1, 1, 2, 3, 1]
removing
checking 2 in [1, 2, 3, 1]
checking 3 in [1, 2, 3, 1]
checking 1 in [1, 2, 3, 1]
removing

然后l=[2,3,1] 。我认为发生的情况是它按索引迭代,因此当删除某些内容时,迭代中的当前索引会减少一。有没有办法在不跳过元素的情况下做到这一点?

最佳答案

永远不要改变您正在迭代的容器,直到您真正知道自己在做什么 - 迭代 l[:],从 l 中删除。

您对问题的理解是正确的 - for 循环不会直接迭代列表值,更改列表大小会破坏索引。

关于python - 迭代时从列表中删除时会跳过迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54640871/

相关文章:

python - 为什么以下 Python 生成器表达式可以工作?

python - 访问 PyTango 属性值

python - 将元组插入 mysql 数据库

javascript - 如何使用 CSS 获取第二行(第三行等)行缩进以匹配列表中具有自定义编号的第一行?

python - 如何在列表中获取生成器的下一个值(python)

python - Numpy:展平二维数组的一些列

python - 使用 Pandas 选定列的 CSV 到 JSON

c++ - 在单个列表中存储多个派生类类型

javascript - 如何创建整个 <li> 可点击,然后在鼠标悬停时在顶部显示框?