• python之循环(增删)内使用list.remove()


    dat=['1', '2', '3', '0', '0', '0']
    
    for item in dat:
        if item == '0':
            dat.remove(item)
    
    print(dat)
    #按要求是把'0'都删掉的,输出结果是['1', '2', '3', '0'] ??

    首先,remove(x) 移除的是序列首次碰到的元素x

    理解:

    遍历列表,item每一次都会变化,可以想象有一个指针指向后一个元素,指针是递增的,从头元素到尾元素直至遍历完。

    容易想到指针 0 --> 1 --> 2 --> 3

    到第四个元素(dat[3]), dat[3]=='0',dat.remove(item), dat=['1','2','3','0','0']        #列表现在有五个元素

    继续:

    指针指向第五个元素(dat[4]),dat[4]=='0',dat.remove(item), dat=['1','2','3','0']    #列表现在有四个元素

    继续:

    指针指向(查找)下一个元素(第六个),哎?  此时dat列表只剩下四个元素,找不到第六个,自然就结束循环了!

    得出:

    列表的增删操作最好不要在for循环里做,迭代内容随着循环而改变了,这样既不安全也没必要,

    换句话说,就是在循环的时候,不要让循环体的(指针/索引)啥的发生变化

    解决:

    可以通过复制一个新的表来做删除操作

    dat=['1', '2', '3', '0', '0', '0']
    d = dat.copy()
    for item in dat:
        if item == '0':
            d.remove(item)
    print(d)
  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/jinfengJeff/p/10632815.html
Copyright © 2020-2023  润新知