zoukankan      html  css  js  c++  java
  • Python列表中去重的多种方法

    怎么快速的对列表进行去重呢,去重之后原来的顺序会不会改变呢?

    去重之后顺序会改变

    set去重

    列表去重改变原列表的顺序了

    l1 = [1,4,4,2,3,4,5,6,1]
    l2 = list(set(l1))
    print(l2)    # [1, 2, 3, 4, 5, 6]
    

    但是,可以通过列表中索引(index)的方法保证去重后的顺序不变。

    l1 = [1,4,4,2,3,4,5,6,1]
    l2 = list(set(l1))
    l2.sort(key=l1.index)
    print(l2)      # [1, 4, 2, 3, 5, 6]
    itertools.groupby
    

    itertools.groupby

    import itertools
    l1 = [1,4,4,2,3,4,5,6,1]
    l1.sort()
    l = []
    it = itertools.groupby(l1)
    for k,g in it:
        l.append(k)
    print(l)      # [1, 2, 3, 4, 5, 6]
    

    fromkeys

    l1 = [1,4,4,2,3,4,5,6,1]
    t = list({}.fromkeys(l1).keys())
    # 解决顺序问题
    t.sort(key=l1.index)
    print(t)         # [1, 4, 2, 3, 5, 6]
    

    通过删除索引

    l1 = [1,4,4,2,3,4,5,6,1]
    t = l1[:]
    for i in l1:
        while t.count(i) >1:
              del t[t.index(i)]
    # 解决顺序问题
    t.sort(key=l1.index)
    print(t)    # [1, 4, 2, 3, 5, 6]
    

    去重不改变顺序

    建立新列表[]

    l1 = [1,4,4,2,3,4,5,6,1]
    new_l1 = []
    for i in l1:
        if i not in new_l1:
            new_l1.append(i)
    print(new_l1)    # [1, 4, 2, 3, 5, 6]
    

    reduce方法

    from functools import reduce
    l1 = [1,4,4,2,3,4,5,6,1]
    func = lambda x,y:x if y in x else x + [y]
    print(reduce(func,[[],]+l1))   # [1, 4, 2, 3, 5, 6]
    
  • 相关阅读:
    Java连接操作redis
    redis 6.0.x简介和安装
    设计模式之代理模式(proxy)
    设计模式之组合模式(composize)
    Linux Shell脚本调试方法
    linuxcfg.sh
    反向代理和正向代理区别
    WAF与IPS的区别总结
    【LemonCK】jQuery的基本使用
    【LemonCK】CSS盒子塌陷问题
  • 原文地址:https://www.cnblogs.com/xxpythonxx/p/12181224.html
Copyright © 2011-2022 走看看