zoukankan      html  css  js  c++  java
  • 列表删除

    一,循环删除动态列表,删除的过程中,列表本身会变化

    1, 错误方式1

    n = [1,2,3,4,5,6,7,8,9,10]
    for x in n:
        n.remove(x)
        print('方法三', n)
    print('方法三最后', n)
    

    输出:

    方法三 [2, 3, 4, 5, 6, 7, 8, 9, 10]
    方法三 [2, 4, 5, 6, 7, 8, 9, 10]
    方法三 [2, 4, 6, 7, 8, 9, 10]
    方法三 [2, 4, 6, 8, 9, 10]
    方法三 [2, 4, 6, 8, 10]
    

    2, 错误方式2, 遗漏了删除4

    num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print(num_list)
    for item in num_list:
        # if item == 2 or item == 3 or item == 4:
        if item in (3, 4, 5):
            print('被删除的元素', item)
            num_list.remove(item)
        else:
            print(item)
    print(num_list)
    

    输出:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    1
    2
    被删除的元素 3
    被删除的元素 5
    7
    8
    9
    10
    [1, 2, 4, 6, 7, 8, 9, 10]
    
    

    3,错误方式3 从这个例子能学到:如果在迭代时删除某个元素,会导致列表改变,但是迭代器依旧以原来的索引顺序迭代,这会导致数据错位,引起bug

    # https://www.cnblogs.com/xuchunlin/p/6049371.html 42/61
    def string_reverse1(string):
        return string[::-1]
    
    c=[5,6,7,1,2,3,4]
    print(string_reverse1(c))
    
    c=[5,6,7,1,2,3,4]
    for b in c:
        print ("before:"+str(b))
        c.remove(b)
        print(c)
        print ("after:"+str(b))
    
    

    输出:

    [4, 3, 2, 1, 7, 6, 5]
    before:5
    [6, 7, 1, 2, 3, 4]
    after:5
    before:7
    [6, 1, 2, 3, 4]
    after:7
    before:2
    [6, 1, 3, 4]
    after:2
    before:4
    [6, 1, 3]
    after:4
    
    

    2, 修改后

    #代码中遍历的是n列表的复制品,从复制品中依次取出每一个元素,将n中对应的内容删除掉。
    n = [1,2,3,4,5,6,7,8,9,10]
    for x in n[:]:
        print('方法一', n)
        n.remove(x)
    

    输出:

    方法一 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    方法一 [2, 3, 4, 5, 6, 7, 8, 9, 10]
    方法一 [3, 4, 5, 6, 7, 8, 9, 10]
    方法一 [4, 5, 6, 7, 8, 9, 10]
    方法一 [5, 6, 7, 8, 9, 10]
    方法一 [6, 7, 8, 9, 10]
    方法一 [7, 8, 9, 10]
    方法一 [8, 9, 10]
    方法一 [9, 10]
    方法一 [10]
    

    2, 长度循环

    # 无论循环进行到哪一步,永远只删除当前列表的第一个元素,不使用不断增加的循环变量就不会出现数组下标越界了。
    n = [1,2,3,4,5,6,7,8,9,10]
    for x in range(len(n)):
        n.remove(n[-1])
        print('方法二', n)
    

    输出:

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

    3,从最后循环删除

    def sort_select(a):
        for i in range(len(a) - 1, -1, -1):
            a.remove(a[i])
            print('哈哈哈a', a, i)
    
    c = [5, 6, 5, 7, 1, 2, 3, 4]
    sort_select(c)
    

    输出:

    哈哈哈a [5, 6, 5, 7, 1, 2, 3] 7
    哈哈哈a [5, 6, 5, 7, 1, 2] 6
    哈哈哈a [5, 6, 5, 7, 1] 5
    哈哈哈a [5, 6, 5, 7] 4
    哈哈哈a [5, 6, 5] 3
    哈哈哈a [6, 5] 2
    哈哈哈a [6] 1
    哈哈哈a [] 0
    

    三 详解

    a = [1,2,3,4,5,6,7,8]
    print(id(a))
    print(id(a[:]))
    for i in a[:]:
        if i > 5:
            pass
        else:
            a.remove(i)
        print(a)
    print('-------------------------')
    print(id(a))
    

    输出:

    2642353420480
    2642351510592
    [2, 3, 4, 5, 6, 7, 8]
    [3, 4, 5, 6, 7, 8]
    [4, 5, 6, 7, 8]
    [5, 6, 7, 8]
    [6, 7, 8]
    [6, 7, 8]
    [6, 7, 8]
    [6, 7, 8]
    -------------------------
    2642353420480
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    智慧光伏能源-园区光伏发电能源管控可视化
    无人值守,智能变电站可视化管控系统
    数字孪生,开启三维智慧园区管理新篇章
    智慧城市大数据运营中心 IOC 之 Web GIS 地图应用
    三维可视化数据中心机房监控管理系统
    打造绿色城市,数字孪生天然气站 3D 可视化
    绿色物流-智慧仓储监控管理 3D 可视化系统
    打造综合性智慧城市之朔州开发区 3D 可视化
    绿色城市之地下综合管廊3D可视化平台
    工业绿色环保发展:风力发电场管理监测可视化系统
  • 原文地址:https://www.cnblogs.com/heris/p/15686587.html
Copyright © 2011-2022 走看看