zoukankan      html  css  js  c++  java
  • python中for循环删除不全的问题

    以前遇到过一次,删除列表中符合条件的元素,for循环挨个判断是否符合条件,符合就删除,删完结果发现有一个符合条件的没有删掉。

    那么如果想删除某些列表中的元素,比如有一个a列表,a=[11,22,33,44,55,66,77]

    删除a中的22和33,应该如何做呢?

    如果你这样写:

             for i in a:

             if i == 22 or i==33:

                       a.remove(i)

    如果按照这样写,22被如期删掉了,但33却没有,删完的结果是:[11,33,44,55,66,77]不信你试试

    为什么呢~~?请看以下分解图,第一次循环,i指向11,不删除:

    11

    22

    33

    44

    55

    66

    77

                                                                                                   

    第二次循环,i指向22,符合删除条件了,遂删除,

    11

    22

    33

    44

    55

    66

    77

                                                                                                            

    删除后,内存会变为:

    11

    33

    44

    55

    66

    77

                                                                                                                

    注意喽,看到了嘛?现在33跑到原本22的位置上了,i仍旧指向的是第二个位置,那么第三次循环,i就会继续向下指向44了,就把33跳过去了,依次类推直到完成循环。

    所以知道为什么上面那段代码会有问题了吧。那么怎么解决呢?只需要找一个临时列表b将要删除的东西存起来,然后再去原列表依次删

    代码改成:

    b=[]

    for i in a:

             if i == 33 or i==44:

                       b.append(i)

    for i in b:

             if i in a:

                       a.remove(i)

  • 相关阅读:
    OGG for sqlserver engryption && insert/delete
    MySQL中SQL_CALC_FOUND_ROWS的用法
    VMWARE 虚拟机新增硬盘,格式化分区,并挂载
    Mycat实战之数据迁移(oracle -- mysql)
    MYCAT实战之分片迁移
    mycat实战之性能测试
    Mycat实战之主键数据库自增方式
    对象的创建与克隆
    c#调用c++的dll,错误篇
    java 模拟消息的发送功能
  • 原文地址:https://www.cnblogs.com/sy_test/p/12028248.html
Copyright © 2011-2022 走看看