python中list去除重复

在一篇很牛的介绍python中list去重的博客(http://www.peterbe.com/plog/uniqifiers-benchmark )中收集到的:


from random import shuffle, randint  
import re  
from sets import Set  
def f1(seq): # Raymond Hettinger  
    # not order preserving  
    set = {}  
    map(set.__setitem__, seq, [])  
    return set.keys()  

def f2(seq):   # *********  
    # order preserving  
    checked = []  
    for e in seq:  
        if e not in checked:  
            checked.append(e)  
    return checked  

def f3(seq):  
    # Not order preserving  
    keys = {}  
    for e in seq:  
        keys[e] = 1  
    return keys.keys()  

def f4(seq): # ********** order preserving  
    noDupes = []  
    [noDupes.append(i) for i in seq if not noDupes.count(i)]  
    return noDupes 

def f5(seq, idfun=None): # Alex Martelli ******* order preserving  
    if idfun is None:  
        def idfun(x): return x  
    seen = {}  
    result = []  
    for item in seq:  
        marker = idfun(item)  
        # in old Python versions:  
        # if seen.has_key(marker)  
        # but in new ones:  
        if marker in seen: continue  
        seen[marker] = 1  
        result.append(item)  
    return result  

def f5b(seq, idfun=None): # Alex Martelli ******* order preserving  
    if idfun is None:  
        def idfun(x): return x  
    seen = {}  
    result = []  
    for item in seq:  
        marker = idfun(item)  
        # in old Python versions:  
        # if seen.has_key(marker)  
        # but in new ones:  
        if marker not in seen:  
            seen[marker] = 1  
            result.append(item)  
def f6(seq):  
    # Not order preserving  
    return list(Set(seq))  

def f7(seq):  
    # Not order preserving  
    return list(set(seq))  

def f8(seq): # Dave Kirby  
    # Order preserving  
    seen = set()  
    return [x for x in seq if x not in seen and not seen.add(x)]  

def f9(seq):  
    # Not order preserving  
    return {}.fromkeys(seq).keys()

def f10(seq, idfun=None): # Andrew Dalke  
    # Order preserving  
    return list(_f10(seq, idfun))  

def _f10(seq, idfun=None):  
    seen = set()  
    if idfun is None:  
        for x in seq:  
            if x in seen:  
                continue  
            seen.add(x)  
            yield x  
    else:  
        for x in seq:  
            x = idfun(x)  
            if x in seen:  
                continue  
            seen.add(x)  
            yield x  

def f11(seq): # f10 but simpler  
    # Order preserving  
    return list(_f10(seq))  

def _f11(seq):  
    seen = set()  
    for x in seq:  
        if x in seen:  
            continue  
        seen.add(x)  
        yield x  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值