Python 迭代时从列表中删除时跳过的迭代

Python 迭代时从列表中删除时跳过的迭代,python,list,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

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

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]
。我认为现在的情况是,它是按索引进行迭代的,所以当删除某个内容时,迭代中的当前索引将被关闭1。有没有一种方法可以在不跳过元素的情况下执行此操作?

在真正知道自己在做什么之前,千万不要对正在迭代的容器进行变异–迭代
l[:]
,从
l
中删除

您对问题的理解是直接的–for循环不会直接迭代列表值,更改列表大小会中断索引