zoukankan      html  css  js  c++  java
  • 解决python 循环遍历列表删除多元素及重复元素

    在遍历list时,删除符合条件的数据,结果不符合预期。

    bb列表中为要删除的元素值,aa为原生列表

    aa = [1,2,2,3,4,5,6,7,7,8,9]
    bb = [2,7]
    for i in aa:
        if i in bb:
            idx = aa.index(i)
            aa.pop(i)
    print(aa)

    循环遍历后的结果为

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

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

    解决办法:

    把列表拷贝,然后对原列表进行删除操作就没问题了

    aa = [1,2,2,3,4,5,6,7,7,8,9]
    bb = [2,7]
    for i in aa[:]:
        if i in bb:
            idx = aa.index(i)
            aa.pop(idx)
    print(aa)

    结果为:

    [1, 3, 4, 5, 6, 8, 9]

    aa[:]是对原始的aa的一个拷贝,是一个新的list_aa,所以,我们遍历新的list_aa,而删除原始的list_aa中的元素,则既不会引起索引溢出,最后又能够得到想要的最终结果。此方法的缺点可能是,对于过大的list,拷贝后可能很占内存

    方法二:可以倒叙遍历列表,删除

    aa = [1,2,2,3,4,5,6,7,7,8,9]
    bb = [2,7]
    for i in aa[::-1]:
        if i in bb:
            idx = aa.index(i)
            aa.pop(idx)
    print(aa)

    结果为:

    [1, 3, 4, 5, 6, 8, 9]
  • 相关阅读:
    mysql主从配置
    前台使用复杂json
    eclipse打包非web项目的整合了spring和mybaits的pom项目,打包可以运行的jar
    Select
    sqlcmd踩坑笔记(环境Ubuntu18.04)
    等待
    戴锦华访谈:小鲜肉 大女主 腐文化的流行 当代女性的生存现状和困境
    CREATE
    语法约定和标识符
    SQL Server应用目录
  • 原文地址:https://www.cnblogs.com/fcc-123/p/14216190.html
Copyright © 2011-2022 走看看