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

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方法,效率更好。

python删除数组元素导致跳过元素的更多相关文章

  1. [java]删除数组中的某一个元素

    package org.company.project.test; import java.util.Arrays; import java.util.Scanner; public class Ar ...

  2. 【Matlab开发】matlab删除数组中符合条件的元素与散点图绘制

    [Matlab开发]matlab删除数组中符合条件的元素与散点图绘制 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ matlab删除数组中符合条件的元素 如 ...

  3. JS 删除数组中指定的某个元素的方法

    //首先创建函数方法 Array.prototype.indexOf = function(val){ for(var i=0;i<this.length;i++){ if(this[i] == ...

  4. 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 ...

  5. Python删除list中多个相同元素

    pop和remove方法都可以删除list中的元素,个人更倾向于使用remove方法,因为在删除过程中不会打印信息,安静的把任务完成. pop方法:删除过程中会打印信息 >>> al ...

  6. 删除数组里含有a的元素,并且将null值放在后面

    想去掉里面含有a的元素,并将null放在后面.放在后面就是往后移,其他值往左移 1 public static void main(String[] args) { 2 //自定义的一个数组 3 St ...

  7. js 如何一次性删除数组中的多个元素

    用for循环或者forEach遍历数组的话,在方法体内部splice都得不到正确的结果.有什么好的办法解决这个问题吗? var arr=[2,3,5,7]; arr.forEach(function( ...

  8. python删除列表中所有的空元素

    while '' in list: list.remove('')

  9. js遍历删除数组中不符合条件的元素

    //一般解决方法 let arr = [1,2,3]; for(let i=0; i<arr.length; i++){ if(arr[i]==2){ arr.splice(i, 1); i-- ...

随机推荐

  1. vue2.0 broadcast和dispatch的理解

    阅读目录 vue2 broadcast和dispatch的理解 回到顶部 vue2 broadcast和dispatch的理解 /* broadcast 事件广播 @param {componentN ...

  2. mysql基础讲解

  3. odoo之带出历史订单产品

    这是在sale_origin中下由两张单子{sale_origin_line和history_order} class history_order(osv.osv): _name="hist ...

  4. 事务,acid,cap,paxos随笔

    事务ACID四个特性: A:原子性(Atomicity)C:一致性(Consistency)I:隔离性(Isolation)D:持久性(Durability) 原子性:语句要么全执行,要么全不执行,是 ...

  5. python实现微信自动回复机器人

    一 简单介绍 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展.实现了微信登录.收发消息.搜索好友.数据统计等功能. 总而言之,可用 ...

  6. Flask-sqlalchemy 语法总结

    Flask-sqlalchemy 语法总结 ** DDLdb.create_all() :创建实体表db.drop_all(): 删除表 1)插入表Db.session.add(user) #user ...

  7. 原创超清的 Webpack2 视频教程

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  8. TRIO-basic指令--九九乘法表demo

    在路上闲的没事,想到之前自己用别的语言实现乘法口诀表,于是来了兴趣用TRIO-basic试一下,挺简单的一段代码,大家看看就好. ' TRIO-basic '实现乘法口诀表 定义两个整型的局部变量 D ...

  9. java内存溢出的解决思路

    原文地址:https://www.cnblogs.com/200911/p/3965108.html 内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能 ...

  10. PAT甲题题解-1129. Recommendation System (25)-排序

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789819.html特别不喜欢那些随便转载别人的原创文章又不给 ...