您的位置:澳门402永利com > 编程应用 > python从列表中删去相邻重复成分,Python列表去重

python从列表中删去相邻重复成分,Python列表去重

发布时间:2019-09-23 20:45编辑:编程应用浏览(162)

    这里以一个栗子来用三种方法实现,输入a=['1','1','2','2','1','1'],输出b=['1', '2', '1']

    Python列表去重,Python列表

    无聊统计了下列表去重到底有多少种方法。

    1.集合

    list(set(alist))
    

    如果要保持顺序:

    import random
    if __name__=='__main__':
        a=[random.randint(0,10) for i in xrange(10)]
        b=list(set(a))
        b.sort(key=a.index)
    

    2.字典

    大都是利用哈希表特性

    {}.fromkeys(alist).keys()
    

    或者手动写:

    import random
    if __name__=='__main__':
        a=[random.randint(0,10) for i in xrange(10)]
        d={}
        for i in a:
            d[i]=1
        print d.keys()
    

    3.排序后查重

    import random
    if __name__=='__main__':
        a=[random.randint(0,10) for i in xrange(10)]
        a.sort()
        print [x for i,x in enumerate(a) if not i or x!=a[i-1]]
    

    4.itertools.groupby

    import random
    import itertools
    if __name__=='__main__':
        a=[random.randint(0,10) for i in xrange(10)]
        a.sort()
        print [x[0] for x in itertools.groupby(a)]
    

    5.遍历

    import random
    if __name__=='__main__':
        a=[random.randint(0,10) for i in xrange(10)]
        b=[] 
        for i in a:
            if i not in b:
                b.append(i)
    

    或者用reduce:

    import random
    import functools
    if __name__=='__main__':
        a=[random.randint(0,10) for i in xrange(10)]
        functools.reduce(lambda x,y:x if y in x else x+[y],[[],]+a)
    

    还有其它方法没?

     

    方法一:

    python 对于去除列表中重复的问题

    list(set(l))  

    1 list1 = ['1','1','2','2','1','1']2 3 def del_adjacent:4     for i in range(len - 1, 0, -1):5         if alist[i] == alist[i-1]:6             del alist[i]7 8 del_adjacent9 print    # ['1', '2', '1']
    

    python列表问题

    list=['mytnametistandrew']
    new=list[0].split('t')  

    无聊统计了下列表去重到底有多少种方法。 1.集合 list(set(alist)) 如果要保持顺序: import randomif __name__=='__main__':...

    该方法思路就是比较相邻两个值,若相同,则del其中一个,逐个遍历,直到没有重复的。

    方法二:使用itertools库

    1 import itertools2 3 list1 = ['1','1','2','2','1','1']4 new_list1 = [k for k, g in itertools.groupby]5 print(new_list1)    # ['1', '2', '1']
    

    这个方法是使用python自带的功能编程模块-itertools,它是一个迭代器函数库,内部有很多很实用且高效的函数,比如此例的groupby()。详细使用可参考python官网:itertools.groupby

    方法三:生成器(generator)

     1 list1 = ['1','1','2','2','1','1'] 2  3 def del_adjacent: 4     prev = object() 5     for iterm in iterable: 6         if iterm != prev: 7             prev = iterm 8             yield iterm 9 10 a = list(del_adjacent    # 这里del_adjacent()是一个生成器类型,需要使用list转换成列表11 print    # ['1', '2', '1']
    

    本文由澳门402永利com发布于编程应用,转载请注明出处:python从列表中删去相邻重复成分,Python列表去重

    关键词:

上一篇:MVC学习笔记1

下一篇:文化整理笔记