https://segmentfault.com/a/1190000007214571

Python的for可以遍历一个List,但是在遍历的过程中删除元素常常会得到意想不到的结果甚至程序出现异常,例如:

lst = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]for item in lst:if item == 0:lst.remove(item)
print lst

输出: [1, 1, 2, 8, 3, 2, 5, 0, 2, 6]

这段代码的本意是想删除列表中元素为 0 的项,但实际跑起来并不是那个结果。

再看下面这个例子,利用索引来遍历删除列表中的元素:

for item in range(len(lst)):if lst[item] == 0:del lst[item]
print lst

输出: IndexError: list index out of range

这时候就报错了,抛出了数组下标越界的异常。原因是用for发起任何形式的遍历时,它的遍历顺序都是从最初就确定的,而在遍历中删除了元素会导致当前索引的变化,这样一是会导致漏删元素,二是会导致遍历超过链表的长度。

所以遍历一个List时要删除其中的部分元素就需要其他的解决方案。

方法一:可以使用filter过滤返回新的List

lst = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]lst = filter(lambda x: x != 0, lst)
print lst

这样可以安全删除列表中值为 0 的元素了,filter包括两个参数,分别是functionlistfilter把传入的函数依次作用于每个元素,然后根据返回值是True还是False来决定是保留还是丢弃该元素。

方法二:列表解析

lst = [x for x in lst if x != 0]
print lst

方法三:或者遍历拷贝的List,操作原始的List

for item in lst[:]:if item == 0:lst.remove(item)
print lst

方法四:while循环来搞定,每次循环都先会判断 0 是否在列表中

while 0 in lst:lst.remove(0)
print lst

方法五:倒序循环遍历

for item in range(len(lst) - 1, -1, -1):if lst[item] == 0:del lst[item]
print lst

python 循环列表删除元素相关推荐

  1. Python 循环列表删除元素的注意事项

    错误示范: class Solution:def removeElement(self, nums, val: int) -> int:for i, num in enumerate(nums) ...

  2. Python list列表删除元素(4种方法)

    文章目录 Python list列表 del:根据索引值删除元素 pop():根据索引值删除元素 remove():根据元素值进行删除 clear():删除列表所有元素 Python list列表 在 ...

  3. 4.4 Python list列表删除元素(4种方法

    在 Python 列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据元素本身的值进行删除,可使用列表(list类型)提 ...

  4. python遍历列表删除元素与修改元素

    这两天写代码的时候遇到了,纪录一下,下次就不用去翻别人的了. 删除元素的时候呢,这样写: for i in a[:]:a.remove(i) 如果是修改元素,在遍历时如果想用迭代器对元素进行修改,是不 ...

  5. 《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素(去重)(8种方法)

    <  Python List列表全实例详解系列(四)> __列表删除元素(4种方法)删除重复元素(去重)(8种方法) 我的技术成长&学习资料整理分享之路 我遇到问题查找资料时,经常 ...

  6. python 列表删除元素

    python 列表删除元素 python 删除元素的几种方式 方式一:使用del方法 >>> names=['Alice','Beth','Cecil','Dee-Dee','Ear ...

  7. python列表元素为中文_python入门基础教程之Python list列表修改元素

    python提供了两种修改列表(list)元素的方法,你可以每次修改单个元素,也可以每次修改一组元素(多个). 修改单个元素 修改单个元素非常简单,直接对元素赋值即可.请看下面的例子: nums = ...

  8. mysql for 循环删除_Java增强for循环中删除元素抛异常问题

    前言 最近突然想起刚毕业那会找工作时面试被问了个这样的问题.就是"使用增强for循环遍历ArrayList(List集合)时删除其中的元素是否会出现异常?".说实话当时真把我愣住了 ...

  9. Python去除列表中元素的前后空格和换行

    Python去除列表中元素的前后空格和换行 一行代码搞定: p = [x.strip() for x in square if x.strip() != ''] #square是列表

最新文章

  1. GitHub分享《深度学习500问》优质资源
  2. 数据库高性能读写分离集群操作说明
  3. linux iptables导致httpd网页打不开
  4. k8s部署dashboard
  5. Open WebRTC Toolkit实时视频分析系统
  6. mongorepository查询条件_MongoRepository实现增删改查和复杂查询【支持的查询类型】...
  7. matlab impdt,实验1 基于Matlab的数字信号处理基本操作
  8. json字符串与json对象之间的转换
  9. 动态规划——最长公共子序列问题(LCS)
  10. HEVC—SAO技术
  11. 中国区块链专利数量全球第一 BAT专利数稳居世界20强
  12. 企业微信跳转第三方APP
  13. Java使用itextpdf实现为已有的pdf文件添加水印
  14. 用c写一个等腰三角星星图案
  15. 通过枚举法暴力破解6位数以内zip密码压缩包,使用pyzipper包:内嵌生成1-6位数字加密码所有组合函数
  16. 高通WLAN框架学习(17)-- NIO和PNO
  17. android 微信朋友圈头像,微信进阶玩法,这样设置朋友圈和头像,个性又好看
  18. VC知识库视频大讲坛系列之GDI GDI+从入门到精通
  19. WinCC控件之ShockwaveFlash
  20. EBS-BI Publisher(RTF报表)语法代码(转载)

热门文章

  1. 前端三大基础语言------学习前先了解
  2. 含金量高、发展潜力大!网络安全行业常用的权威职业证书有哪些?
  3. 基于MATLAB的关节型六轴机械臂轨迹规划仿真(2021实测完整代码)
  4. dumpsys activity用法汇总
  5. 渲染线程开始-大象无形11.1,
  6. java byte转int原理_java中int与byte数组互转代码详细分析
  7. ResNet与ResNeXt
  8. Go语言工具包之gomock
  9. keyshot可以打开mtl文件吗_KeyShot支持哪些文件格式_KeyShot支持的文件格式详解 - 正软商城...
  10. c++ 判断inf 和nan 的情况