zoukankan      html  css  js  c++  java
  • 防止数组删除元素时发生指针偏移

    【Python】删除数组多个元素所产生的问题

    #-*-coding:utf-8-*- arr=[1,2,3]; for a in arr: if a<3: arr.remove(a); print arr;
    我本来想用数组中自动封装好的remove()方法,删除数组arr中少于3的元素

    这个方法删除数组中单个元素是没有任何问题,但是如果想删除arr中,少于3的元素问题就来的。

    arr中有三个元素,1,2,3,少于3的元素有2个,删除之后很显然只是剩下[3],我开始也是这样认为,但是运行结果却是[2,3],如下图所示:

    原因是这样的:

    remove()在删除数组单个元素的时候,删完元素很明显需要把指针位置向前移1位,这就发生如上图所示的指针偏移。

    因此需要删除数组中多个元素的时候,绝对不能向上面那样写。

    为此,可以用如下的方式结局,进行数组中多个元素删除的时候,先把这个数组复制一个,删的时候,遍历临时数组,删元数组的元素,删完再删除临时数组,这就不会发生因删除而导致的指针偏移了。具体代码如下:

    #-*-coding:utf-8-*- arr=[1,2,3]; arr_temp=arr[:]#直接创建一个新的数组arr_temp并将arr的元素倒进来,arr_temp=arr的话,arr_temp仅仅是一个指向arr数组的指针而已。 for a in arr_temp: if a<3: arr.remove(a); del arr_temp; print arr;
    运行结果自然也符合我们所想象的一样,最后在arr里面剩余3这个元素!

  • 相关阅读:
    svn随笔
    关于PHP调用IE的Com组件的一些要求
    Bash总结
    Firefox常用扩展
    proftpd的一些简单配置
    lua积累
    backbone.js源码解析:extend、Backbone.View
    Ubuntu 12.04LTS 安装VMwareWorkstation
    关于安装Ubuntu不将mbr写入grub的经验
    .NET6发布到linux
  • 原文地址:https://www.cnblogs.com/xiaojiayu/p/5292269.html
Copyright © 2011-2022 走看看