zoukankan      html  css  js  c++  java
  • python遍历列表删除多个元素的坑

    如下代码,遍历列表,删除列表中的偶数时,结果与预期不符。

    a = [11, 20, 4, 5, 16, 28]
    for i in a:
        if i % 2 == 0:
            a.remove(i)
    print a

    得到的结果为:

    >>> [11, 4, 5, 28]

    其中偶数4和28都没有删掉,原因在于for循环在遍历列表时,是按照元素的索引依次访问元素的,当删除其中一个元素后,后面的元素会依次前移,即就是删除索引1处的元素20后,将访问索引为2的元素,但由于删除元素20之后,后面的元素会依次前移,元素4的索引就成了1,就不会访问了,此时访问到的元素就是5,元素28没有删掉的原因也是一样。

    为了解决这个问题,比较好的方法有下面两种:

    倒序循环遍历

    a = [11, 20, 4, 5, 16, 28]
    for i in range(len(a)-1, -1, -1):
        if a[i] % 2 == 0:
            del a[i]

    filter函数

    a = [11, 20, 4, 5, 16, 28]
    b = filter(lambda x: x % 2 != 0, a)

    我们要删除的是偶数,保留的是奇数,所以把奇数过滤出来保存到新的列表b中。

  • 相关阅读:
    Struts2框架(二)
    Struts2框架(一)
    jsp定义全局的错误处理
    BeanUtils的使用、Java中的路径问题
    IntelliJ IDEA 14.1.4(Window)快捷键
    Log4J日志组件
    注解
    反射
    泛型
    AndroidStudio开发工具快捷键(转)
  • 原文地址:https://www.cnblogs.com/lucky-heng/p/10545197.html
Copyright © 2011-2022 走看看