• 删除列表里面重复的值的7种方法


    删除列表里面重复的值的7种方法

    l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    # 版本一: 直接遍历列表删除
    for el in l1:
        if l1.count(el) > 1:
            l1.remove(el)
    print(l1)# 会漏删,因为删除一个元素后,后面的元素向前补位,导致紧跟的一个元素被跳过.
    # 版本二: 通过遍历索引删除
    l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    for el in range(len(l1)):  # 此时len(l1)已经确定,不会随着l1后面的变化而变化
        if l1.count(l1[el]) > 1:
            l1.remove(l1[el])
    print(l1)  # 会报错,因为删除元素后导致l1的长度变短了,但是for遍历的还是之前的索引长度,会导致索引超过范围而报错
    # 版本三: 通过遍历创建的切片来删除原列表
    l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    for el in l1[:]:
        if l1.count(el) > 1:
            l1.remove(el)
    print(l1)   # 没有问题,可以去重,但是无法保留原有的顺序
    # 版本四: 用新列表记录需要保留的元素
    l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    lst = []
    for el in l1:
        if lst.count(el) < 1:
            lst.append(el)
    print(lst)   # 没有问题,也能保留原有顺序,但是创建了新列表
    # 版本五: 通过索引倒着删除
    l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    for el in range(len(l1)-1, -1, -1):
        if l1.count(l1[el]) > 1:
            l1.remove(l1[el])
    print(l1)   # 没有问题,但是不能保留原有顺序
    # 版本六: 通过递归函数删除
    l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    def set_lst(lst):
        for el in lst:
            if lst.count(el) > 1:
                lst.remove(el)
                set_lst(lst)    # 每次开辟一个新函数,判断上次被删除了一个元素后的列表
        else:  # 直到最后,列表里的元素都是一个,运行了else
            return lst
    print(set_lst(l1))  # 因为是从前面开始删除的,所以不保留原有顺序
    '''
    [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    [1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    [1, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    [1, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    [1, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    [1, 3, 3, 6, 6, 5, 5, 2, 2]
    [1, 3, 6, 6, 5, 5, 2, 2]
    [1, 3, 6, 5, 5, 2, 2]
    [1, 3, 6, 5, 2, 2]
    [1, 3, 6, 5, 2]   return lst = [1, 3, 6, 5, 2]
    '''
    # 版本七: 毫无疑问set()是最方便的
    l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
    lst = list(set(l1))
    print(lst)
    
  • 相关阅读:
    【前端】用百度BAE和express部署自己的node后台
    【前端】JavaScript中prototype和__proto__的区别
    【其他】Objective-C 内存管理学习总结
    【Unity3D】Unity3D 让角色的头部望向鼠标
    【Unity3D】Unity3D 摄像机带透明截图
    【前端】前端冷知识
    【Unity3D】Unity3D SkinnedMeshRenderer换装系统
    【前端】HTML中最适合做按钮的元素
    IEnumerable和IEnumerator 详解 分类: C# 2014-12-05 11:47 18人阅读 评论(0) 收藏
    LINQ to Entities
  • 原文地址:https://www.cnblogs.com/maqian/p/11907358.html
Copyright © 2020-2023  润新知