zoukankan      html  css  js  c++  java
  • python中循环删除列表中元素时的坑

    1.案例

    alist = [2,4,5,6,7]
    for var in alist:
        if var %2 == 0:
            alist.remove(var)
    print(alist) 
    • 对于上述代码,第一眼我们会得出结果 [5,7]

    • 但当我们执行后得到结果为 [4, 5, 7]

    • 那么原因是什么呢?

    2.案例分析

    1.原列表在内存中存储可抽象成: 
        # [2,4,5,6,7]
    2.当第一次执行 alist.remove(var)时将第一个元素‘2’删除,列表变为:
        # [4,5,6,7]
    3.当第二次执行 alist.remove(var)时 var 为第二个元素,即'5' ,此时不进行删除,列表保持不变:
        # [4,5,6,7]
    4.当第三次执行 alist.remove(var)时 var 为第三个元素,即'6' ,删除'6',列表变为:
        # [4,6,7]
    5.当第四次执行 alist.remove(var)时 var 时此时列表已经没有第四个元素了,即退出循环,将[4,5,7]返回。
        # [4,6,7]

    3.问题的解决

    可以用倒序删除的方法

    blist = alist[::-1]
    for var in blist:
        if var %2 == 0:
            blist.remove(var)
    print(blist)

    总结:正序删除列表中元素时,被删元素后面的值会向前顶,然后导致漏删。倒序删除元素时,被删元素前面的值不会向后靠,所以可以完整的遍历到列表中所有的元素。

  • 相关阅读:
    css相关
    杂题
    vuesheng生命周期
    box-sizing
    js正则学习
    浏览器加载解析过程
    Sass学习笔记
    jQuery与原生js实现banner轮播图
    jq-animate实现返回顶部效果
    jq-animate
  • 原文地址:https://www.cnblogs.com/lilinyuan5474/p/11685860.html
Copyright © 2011-2022 走看看