【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这个元素!

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

时间: 2024-07-31 20:20:50

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

删除数组中某个元素

需求:已知一个数组,删除其中某个元素,其它向左移,最后一位补null值 分析: 1.找出要删除元素的下标,找个变量接收 2.此位置元素后面的元素依次向左移一位 3.补齐最后一位赋值null 4.输出新数组 /** * */ package com.cn.u4; /** * @author Administrator *删除数组中某个元素值 */ public class DelArray { public static void main(String[] args) { //定义数组 Stri

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

python 删除list中重复元素

list = [1,1,3,4,6,3,7] 1. for s in list: if list.count(s) >1: list.remove(s) 2. list2=[] for s in list: if s not in list2: list2.append(s) print list2 3. list2=[] for s in list: list2.append(s) print list2 python 删除list中重复元素

删除数组中某元素,返回含有剩余元素的数组

arr为删除前的数组,key为要删除的元素对象.//删除数组中某元素,返回含有剩余元素的数组------------------------------------function arrMove(arr, key){ var temp = []; for (var i=0; i<arr.length; i++) { if (arr[i] != key) { temp.push(arr[i]); } } return temp;}

js删除数组中的元素

js删除数组中的元素delete和splice的区别 例如有一个数组是 :var textArr = ['a','b','c','d']; 这时我想删除这个数组中的b元素: 方法一:delete 删除数组 delete textArr[1] 结果为: ["a",undefined,"c","d"] 只是被删除的元素变成了 undefined 其他的元素的键值还是不变. 方法二:aplice 删除数组 splice(index,len,[item]

[编程题]删除数组最后一个元素

删除数组 arr 最后一个元素.不要直接修改数组 arr,结果返回新的数组 输入例子: truncate([1, 2, 3, 4]) 输出例子: [1, 2, 3] //利用slice function truncate(arr) { return arr.slice(0,-1); } //利用filter function truncate(arr) { return arr.filter(function(v,i,ar) { return i!==arr.length-1; }); } //

[码海拾贝 之JS] JS 之删除数组中的元素

前言 在Java 中要从一个list 中删除一个元素, 直接使用 remove 方法就可以了. 在js 中的array 并没有 remove 方法, 但是在js 中array 有splice 方法可以达成相同的效果, 除此之外, 还可以使用其他方式来实现这个效果. 使用splice 方法实现从数组中删除元素 首先看一下 splice 方法如何使用. 语法 arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 index 必需.整数,规

python——删除列表中的元素

在python中,删除列表元素的方法有三种,分别为remove(),del(),pop()函数 (1)remove() >>> name = ['小明','小华','小红','小李','小霞','小文'] >>> name.remove('小红') >>> name ['小明', '小华', '小李', '小霞', '小文'] remove()函数里面的参数必须是列表中已有的元素值. (2)del() >>> name = ['小明'

python删除数组中元素

有数组a,要求去掉a所有为0的元素 a = [2,4,0,8,9,10,100,0,9,7] Filter a= filter(None, a) Lambada a = filter(lambda x: x != 0, a) for for b in a: if b == 0: a.remove(b)