码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-31 13:07:29      阅读:111      评论:0      收藏:0      [点我收藏+]

标签: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这个元素!

技术分享


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:python   删除   数组   复制   指针   

原文地址:http://blog.csdn.net/yongh701/article/details/47166951

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!