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)
  • 相关阅读:
    微信红包开发
    第一次开博客,留此纪念
    数据结构--树(遍历,红黑,B树)
    c++之vector
    动态规划求解最长公共子序列问题
    c++之map
    k-折交叉验证(k-fold crossValidation)
    prim算法
    快速排序算法
    浙大机试题目
  • 原文地址:https://www.cnblogs.com/jinfengJeff/p/10632815.html
Copyright © 2011-2022 走看看