• python删除数组元素导致跳过元素


    复现的情况大概可以写成这样

    abc = [1, 2, 2, 3, 4]
    print abc
    
    for index, i in enumerate(abc):
        if i == 2:
            del abc[index]
    
    print abc

    可以发现一个问题,按照我的想法这个例子将会把两个2都删除了之后得到一个只有元素[1, 3, 4]的abc。

    但是实际操作之后发现,其将返回一个[1, 2, 3, 4]的数组

    这究竟是怎么导致的????

    问题就在于我直接在原始数组里面del掉了某个符合条件的元素,比如我在index==1的时候删掉了第一个2 这个时候再进行下次循环的时候index==2但是原来的数组abc编程了[1, 2, 3, 4],而index==2是3,跳过了2导致了结果与我们的预期完全不一样了。

    我用了一个站位的方式来占着需要删除的家伙,然后让index依然可以正常寻址,但死这个方法。并不是最好的,因为数组的insert方法在非常大的情况下面效率非常低。

    abc = [1, 2, 2, 3, 4]
    print abc
    
    for index, i in enumerate(abc):
        if i == 2:
            del abc[index]
            abc.insert(index, None)
    
    print filter(None, abc)

    应该有更好的办法?

    由于判断条件的关系。。我直接用了一个更取巧的办法

    abc = [1, 2, 2, 3, 4]
    print abc
    
    for index, i in enumerate(abc):
        if i == 2:
           abc[index] = None
           
    print filter(None, abc)

    直接给符合条件的元素赋值成不可能的值,最后再来过滤,这样也不用使用O(n)的insert方法,效率更好。

  • 相关阅读:
    【转】 【技巧 】 数学难题大揭秘:减少计算错误的技术
    [转]Mathematical Induction --数学归纳法1
    Vector Calculus
    test latex1
    [转]架构蓝图--软件架构 "4+1" 视图模型
    What Is Mathematics?
    二项式展开
    游戏系统设计
    Golang游戏服务器与skynet的个人直观比较
    [转]透过 Linux 内核看无锁编程
  • 原文地址:https://www.cnblogs.com/piperck/p/5661692.html
Copyright © 2020-2023  润新知