zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    WINDOWS REDIS 修改requirepass 不生效;
    解读JavaScript原型链
    禁止浏览器自动填写用户名密码
    Vue购物车实例
    scrollTop的兼容性
    jQuery架构(源码)分析
    web前端优化整理(转)
    前端模块化:RequireJS(转)
    前端构建之gulp与常用插件(转载)
    PS快捷键
  • 原文地址:https://www.cnblogs.com/jinfengJeff/p/10632815.html
Copyright © 2011-2022 走看看