Python 列表循环删除

案例

列表循环删除中,第一次很容易采坑

如下面案例,我们想把列表中 2全部删除

alist = [1,2,3,1,2,2,3,4]

for i in alist:
    if i == 2:
        alist.remove(i)

print(alist)

我们希望得到 [1, 3, 1, 3, 4]

结果 [1, 3, 1, 2, 3, 4,有一个2漏掉了

分析

for循环一个list的时候,每次循环Index索引+1。

如果这个时候动态的改变列表

比如第一次循环 索引Index = 0, 下一次循环就是 Index = 1

如果这个时候列表list动态的改变了,

例如Index=1的元素前进的一位,变为Index = 0位置了,这个时候就会漏掉,循环索引会找Index=1的,但是你的Index变为0了,就漏掉了。

alist = [2,2,3]
for i in alist:
    if i == 2:
        alist.remove(i)
print(alist) 
# [2,3]
# 第一次循环,alist=[2,2,3] Index=0,元素为2,删掉。列表[2,2,3] -> [2,3]
# 第二次循环,alist=[2,3]   Index=1,元素为3,不删。列表[2,3]

避坑

采用倒叙
或者拷贝一个新列表循环

alist = [2,2,3]
for i in alist[:]:
    if i == 2:
        alist.remove(i)
print(alist)

alist = [2,2,3]
for i in alist[::-1]:
    if i == 2:
        alist.remove(i)
print(alist)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页