您好、欢迎来到现金彩票网!
当前位置:在线斗牛棋牌游戏 > 尾递归删除 >

Python中list循环遍历中删除数据报溢出异常

发布时间:2019-07-22 04:08 来源:未知 编辑:admin

  初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下:

  原因是在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照原来list的长度进行遍历,所以会造成索引溢出。

  虽然最后,list中的元素[2]确实被删除掉了,但是,在循环中的打印结果不对,少打印了[3]。

  思考了下,知道了原因,当符合条件,删除元素[2]之后,后面的元素全部往前移,于是[3, 4, 5]向前移动,那么元素[3]的索引,就变成了之前[2]的索引(现在[3]的下标索引变为1了),后面的元素以此类推。可是,下一次for循环的时候,是从下标索引2开始的,于是,取出了元素[4],就把[3]漏掉了。

  既然知道了问题的根本原因所在,想要找到正确的方法,也并不难,于是我写了如下的代码:

  我的做法是,既然用for循环不行,那就换个思路,用while循环来搞定。每次while循环的时候,都会去检查list的长度(i len(num_list)),这样,就避免了索引溢出,然后,在符合条件,删除元素[2]之后,手动把当前下标索引-1,以使下一次循环的时候,通过-1后的下标索引取出来的元素是[3],而不是略过[3]。

  当然,这还不是最优解,所以,我搜索到了通用的解决方案:1、倒序循环遍历;2、遍历拷贝的list,操作原始的list。

  原始的list是num_list,那么其实,num_list[:]是对原始的num_list的一个拷贝,是一个新的list,所以,我们遍历新的list,而删除原始的list中的元素,则既不会引起索引溢出,最后又能够得到想要的最终结果。此方法的缺点可能是,对于过大的list,拷贝后可能很占内存。那么对于这种情况,可以用倒序遍历的方法来实现。

  大学上C语言的时候理论上碰到过数据溢出的问题,今天在处理实验数据中真的碰到了这个问题:对于数据过大的数值相乘时可能数据上溢问题,此时,可更改数据类型,增大数据范围。对于数据过小的数值相乘时可能数据下溢...博文来自:专注机器学习之路

  自己开始写图像查重算法,用到了列表和元组,因为之前没怎么用过,现查现用有好多细节不清楚——结果这个简单的查重逻辑实现花了一整天! 坑:按长度遍历应如下,而不是简单的foriinlist那返回的是列表的...博文来自:natural_Caduceus

  在用Python写一下求最长公共子序列的问题,List C表示比较的结果,List B表示结果来自上还是左还是左上。但是一直报错说我越界,我感觉自己的理论没有问题啊,百思不得其解,求助! 以下是我的代论坛

  Python导数据的时候,需要在一个大表上读取很大的结果集。如果用传统的方法,Python的内存会爆掉,传统的读取方式默认在内存里缓存下所有行然后再处理,内存容易溢出解决的方法:1)使用SSCurso...博文来自:Lucky-zhou的博客

  解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含...博文来自:jingtiangao的博客

  比如一个list里有三个元素,并且都符合删除的条件,使用for循环删除时会引发currentModificationException解决办法就是使用list的迭代器进行删除...博文来自:zengzp1994的博客

  最近在搞一个购物车的功能,里面有一个批量删除的操作,采用的是ExpandableListView以及BaseExpandableListAdapter。视乎跟本篇无关紧要,主要是为了记录一个java基...博文来自:trebleZ的博客

  一个ArrayList在循环过程中删除,会不会出问题,为什么?ArrayList中的remove方法(注意ArrayList中的remove有两个同名方法,只是输入参数不同,这里看的是输入参数是Obj...博文来自:钱立清的博客

  前言本次分析基于CPython解释器,python3.x版本在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数。在python3后,统一使用...博文来自:hebtu666

  用python写了一个脚本。 用的是while True的循环。 基本内容是一直检测图像中某一个点的颜色,是否是某个颜色,如果是就进行操作。 运行的时候,打开任务管理器,可以看到Python.exe的论坛

  最近在我的项目中,出现了内存持续增长的情况。这也是我第一次碰到这种情况,以前在写c++都没试过,难得啊,所以记录,积累一下经验。一、项目背景生产者和消费者,操作kafka,使用的是pykafka库。消...博文来自:kelindame的专栏

  算是回顾知识吧,以前就听老师说list遍历列表要删除元素要用iterator.remove(),没怎么注意,今天试着写了一个方法,运行了一下发现还真是。ArrayListarrayList=newAr...博文来自:的博客

  一、业务场景当我们需要剔除list中的某些元素时,通常的做法就是循环遍历list,然后符合条件时remove掉该元素。一、实现逻辑for(Iteratorlt;Stringgt;i...博文来自:涛涛的博客

  ArrayList是java开发时非常常用的类,常碰到需要对ArrayList循环删除元素的情况。这时候大家都不会使用增强for循环的方式来遍历List,因为它会抛java.util.Concurre...博文来自:new03的专栏

  今天写算法时候遇到个问题,就是数组下标越界,情况如下:我新建了一个数组,又有一个ArrayList集合。假如我想删除数组的某个元素nums[x]元素我想通过    方法删除如:remove(nums[...博文来自:Sunmeok的博客

  列表(list)是python的基本数据结构,list中每一个元素都分配一个位置索引,可以通过索引访问元素值,list不要求数据项有相同的数据类型。list初始化list由一个方括号加内部由逗号分割出...博文来自:牧野的博客

  Python用for循环来遍历list时,for循环体内有改动list长度的操作的情况。注意,`lists`这个`list`变量在for循环进行的过程中,会被删除一部分元素(偶数),也就是说,在for...博文来自:sinat_30415255的博客

  前段时间做项目时需要对list数据做过滤,当时想到的是for循环和增强for循环,跑过的数据总是不对,以为逻辑的问题,搞了好久,后来网上看了下,发现是for循环和增强for循环的问题,必须使用迭代器删...博文来自:Uself

  【一】】for循环Python中for的用法跟C++有点区别,首先是把列表的元素传递给变量,并存储到这个变量中,然后循环打印存储在变量中的元素,别忘记了还有一个冒号,如果要循环输出,需要对后面的代码进...博文来自:天朝程序员

  list集合平常自以为用的非常熟了,原来只是用add()方法熟练而已,碰到remove一报错就彻底暴露了自己的短板啦。来,给list集合删除某些元素,先上一段代码:   1)报错啦   Listlis...博文

  今天在分析ArrayList源码的过程中,突然想起许久以前发生的一个问题,就是在循环中删除元素的时候底层会报出一个异常“ConcurrentModificationException”,然后从网上也看...博文来自:梦想不只是梦与想的博客

  什么是set:set持有一系列元素set与dict(字典)区别:dict的作用是建立一组key和一组value的映射关系,dict的key是不能重复的。set持有一系列元素,这一点和list很像,但是...博文来自:释梦燃的博客

  相信大家对集合遍历再熟悉不过了,这里总结一下HashMap和List的遍历方法,以及它们该如何实现遍历删除。这里对于每种遍历删除出现的问题的原因都给出了详解!(一)List的遍历方法及如何实现遍历删除...博文来自:demohui的博客

  首先,我们来随便写一个带空格的列表:list1=[122,2333,3444,,422,,,54,]相信已经有人尝试过,诸如以下的方式去删掉空格,例如:#-*-co...博文来自:苏酒酒的博客

  xiaonuo911teamo:我感觉好像挺简单的。 当n=2时,必须人数相等才行。当n2时,只要人数最多的k组s[k]≤【人数总和】/2。 这样的话,不需要排序,只需要在读取时顺便把【人数总和】求出,人数最多的组s[k]求出。读取结束后直接做个比较就好了吧。

http://missartypants.com/weidiguishanchu/333.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有