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协程

    浅谈Python协程

    这篇文章主要介绍了Python协程的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 用Python远程登陆服务器的步骤

    用Python远程登陆服务器的步骤

    这篇文章主要介绍了用Python远程登陆服务器的步骤,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • 通过python顺序修改文件名字的方法

    通过python顺序修改文件名字的方法

    今天小编就为大家分享一篇通过python顺序修改文件名字的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Django中ModelForm组件的简单配置与使用教程

    Django中ModelForm组件的简单配置与使用教程

    modelform是django中基于已有的model,快速生成的具有form功能的一个模块,下面这篇文章主要给大家介绍了关于Django中ModelForm组件的简单配置与使用教程,需要的朋友可以参考下
    2022-10-10
  • Python traceback模块获取异常信息的使用

    Python traceback模块获取异常信息的使用

    Python的traceback模块提供了多种方法来获取和展示异常的堆栈信息,本文主要介绍了Python traceback模块获取异常信息的使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 对python 生成拼接xml报文的示例详解

    对python 生成拼接xml报文的示例详解

    今天小编就为大家分享一篇对python 生成拼接xml报文的示例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 详解python爬取弹幕与数据分析

    详解python爬取弹幕与数据分析

    这篇文章主要介绍了详解python爬取弹幕与数据分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • python项目导入open3d后报错ImportError:DLL load failed:找不到指定的模块问题

    python项目导入open3d后报错ImportError:DLL load failed:找不到

    这篇文章主要介绍了python项目导入open3d后报错ImportError:DLL load failed:找不到指定的模块问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Python格式化输出--%s,%d,%f的代码解析

    Python格式化输出--%s,%d,%f的代码解析

    这篇文章主要介绍了Python格式化输出--%s,%d,%f的代码详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Python用for循环实现九九乘法表

    Python用for循环实现九九乘法表

    本文通过实例代码给大家介绍了Python用for循环实现九九乘法表的方法,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05

最新评论