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)

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

  • 相关阅读:
    MSP430的CAN通信发送
    Arduino 101/Genuino101使用-第2篇
    CC2541调试问题记录-第一篇
    STM32运行FreeRTOS出现prvTaskExitError错误死机
    Arduino 101/Genuino101使用-第一篇
    LAUNCHXL-28379D入门学习-第一篇
    蒸汽机的原理
    等高线相似性匹配
    cad转shapefile文件
    ArcGIS坐标转换
  • 原文地址:https://www.cnblogs.com/lilinyuan5474/p/11685860.html
Copyright © 2011-2022 走看看