Python语法糖遍历列表时删除元素方法示例详解

 更新时间:2023年05月26日 09:31:39   作者:wzhvictor  
这篇文章主要为大家介绍了Python语法糖遍历列表时删除元素详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

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

倒序是最geek的解决办法,但是倒序的代码可读性差,推荐用filter,这样写出来的代码更Pythonic。

以上就是Python语法糖遍历列表时删除元素详解的详细内容,更多关于Python遍历列表删除元素的资料请关注脚本之家其它相关文章!

相关文章

  • Python办公自动化之将任意文件转为PDF格式

    Python办公自动化之将任意文件转为PDF格式

    这种把某个文件转为pdf枯燥无聊的工作,既没有什么技术含量又累. 今天辰哥就教大家将任意文件批量转为PDF,这里以日常办公的word、excel、ppt为例,这三种格式的文件转为PDF.需要的朋友可以参考下
    2021-06-06
  • Python及PyCharm下载与安装教程

    Python及PyCharm下载与安装教程

    这篇文章主要为大家详细介绍了Python及PyCharm下载与安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 使用Python编写一个Lisp语言的解释器

    使用Python编写一个Lisp语言的解释器

    这篇文章主要为大家详细介绍了如何使用Python编写一个简单的Lisp语言的解释器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Python Django项目和应用的创建详解

    Python Django项目和应用的创建详解

    这篇文章主要为大家介绍了Python Django项目和应用的创建,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • python基础中的文件对象详解

    python基础中的文件对象详解

    这篇文章主要为大家介绍了python基础中的文件对象,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python数据分析23种Pandas核心操作方法总结

    Python数据分析23种Pandas核心操作方法总结

    在本文中,作者从基本数据集读写、数据处理和 DataFrame 操作三个角度展示了 23 个 Pandas 核心方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Pandas使用分隔符或正则表达式将字符串拆分为多列

    Pandas使用分隔符或正则表达式将字符串拆分为多列

    本文主要介绍了Pandas使用分隔符或正则表达式将字符串拆分为多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python中通过property设置类属性的访问

    Python中通过property设置类属性的访问

    为了达到类似C++类的封装性能,可以使用property来设置Python类属性的访问权限,本文就介绍一下Python中通过property设置类属性的访问,感兴趣的可以了解一下,感兴趣的可以了解一下
    2023-09-09
  • python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析

    python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析,需要的朋友可以参考下
    2020-03-03
  • Django 外键的使用方法详解

    Django 外键的使用方法详解

    这篇文章主要介绍了Django 外键的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论