`
san_yun
  • 浏览: 2664018 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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)
            
    return result



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
            
import time

def timing(f, n, a):
    print f.__name__,
    r = range(n)
    t1 = time.clock()
    for i in r:
        f(a); f(a); f(a); f(a); f(a); f(a); f(a); f(a); f(a); f(a)
    t2 = time.clock()
    print round(t2-t1, 3)
    



def getRandomString(length=10, loweronly=1, numbersonly=0,
                    lettersonly=0):
    """ return a very random string """
    _letters = 'abcdefghijklmnopqrstuvwxyz'
    if numbersonly:
        l = list('0123456789')
    elif lettersonly:
        l = list(_letters + _letters.upper())
    else:
        lowercase = _letters+'0123456789'*2
        l = list(lowercase + lowercase.upper())
    shuffle(l)
    s = ''.join(l)
    if len(s) < length:
        s = s + getRandomString(loweronly=1)
    s = s[:length]
    if loweronly:
        return s.lower()
    else:
        return s

testdata = {}
for i in range(35):
    k = getRandomString(5, lettersonly=1)
    v = getRandomString(100 )
    testdata[k] = v
    
testdata = [int(x) for x in list('21354612')]
testdata += list('abcceeaa5efm')
class X:
    def __init__(self, n):
        self.foo = n
    def __repr__(self):
        return "<foo %r>"%self.foo
    def __cmp__(self, e):
        return cmp(self.foo, e.foo)
        
testdata = []
for i in range(10000):
    testdata.append(getRandomString(3, loweronly=True))
#testdata = ['f','g','c','d','b','a','a']


order_preserving = f2, f4, f5, f5b, f8, f10, f11
order_preserving = f5, f5b, f8, f10, f11

not_order_preserving = f1, f3, f6, f7, f9
testfuncs = order_preserving + not_order_preserving


for f in testfuncs:
    if f in order_preserving:
        print "*",
    timing(f, 100, testdata)

分享到:
评论

相关推荐

    Python list列表中删除多个重复元素操作示例

    本文实例讲述了Python list列表中删除多个重复元素操作。分享给大家供大家参考,具体如下: 我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) ...

    Python实现去除列表中重复元素的方法小结【4种方法】

    在Python编程中,处理列表时,我们经常遇到需要去除重复元素的情况。本篇文章将详细介绍四种在Python中实现去除列表重复元素的方法,每种方法都有其适用场景和特点。 1. **使用集合(Set)** 集合是Python内置的...

    List列表拒绝添加重复信息

    将List转换为Set,可以自动去除重复项。例如: ```python my_list = [1, 2, 3, 2, 4, 3] my_set = set(my_list) ``` 在这个例子中,`my_set`将只包含`{1, 2, 3, 4}`,因为重复的2和3已被移除。 如果我们仍然需要...

    Python去除列表中重复元素的方法

    在Python编程中,处理列表数据时,我们常常需要去除其中的重复元素。下面将详细介绍几种在Python中去除列表重复元素的方法,并分析它们的优缺点。 1. 使用集合(Set)转换 这是最常见也是最直观的方法。集合是无序...

    Python实现去除列表中重复元素的方法总结【7种方法】

    `set`是Python中的一个无序不重复元素序列,将列表转换为`set`后再转换回列表即可去除重复元素。这种方法简单快捷,但会改变原列表的顺序。 ```python def func1(data_list): return list(set(data_list)) ``...

    python去除文件中重复的行实例

    首先,去除文件中重复行的基本思想是在读取文件的每一行时,通过一个列表(res_list)来记录已经出现过的行。在读取每一行时,都会进行检查,判断该行是否已经存在于res_list中。如果不存在,就将该行添加到列表中,...

    Python实现嵌套列表及字典并按某一元素去重复功能示例

    这个类的主要功能是合并资源列表并消除重复项,这里的重复是基于字典中的`'host'`键的值。 `MergeHost`方法通过创建一个新的空列表`allResource`来开始。然后,它将`resource_list`的第一个元素添加到`allResource`...

    python 去除二维数组/二维列表中的重复行方法

    在Python编程中,处理数据时有时需要去除二维数组或二维列表中的重复行。二维数组,通常指的是numpy数组,而二维列表则是由多个列表组成的列表。本文将详细介绍如何在Python中去除这些结构中的重复行。 首先,我们...

    python去重,一个由dict组成的list的去重示例

    在Python编程中,经常会遇到需要对数据进行处理的情况,特别是当涉及到数据清洗时,去除重复数据是一项非常重要的任务。本篇文章将详细介绍如何对一个由字典(dict)组成的列表(list)进行去重操作,并通过几个具体...

    python消除序列的重复值并保持顺序不变的实例

    总结来说,Python提供了多种灵活的方式来去除序列中的重复项,并且能够根据需求保持原始的顺序。使用集合是最简单的方法,但可能会改变元素的顺序。如果需要保持顺序,可以考虑使用辅助集合或者生成器模式。对于不可...

    Python中英文词汇对照表(2020).pdf

    以下是对Python中英文词汇对照表中提到的一些关键知识点的详细解释: 1. **交互式环境与print输出**: - `print`:在Python中,`print`函数用于输出信息到控制台。 - `coding`:编码,指程序的编写。 - `syntax`...

    Python实现字典去除重复的方法示例

    本文通过几个具体的实现方法展示了如何有效地去除Python字典中的重复项。每种方法都有其适用场景,选择哪一种取决于具体的需求。此外,还提供了一个非字典去重的示例代码,用作参考。在实际开发中,根据项目的具体...

    python面试题汇总(

    6. 在Python中,去除列表中的重复元素通常可以先将列表转换成集合(自动去除重复元素),然后再转回列表。 7. 函数定义中的*args和**kwargs允许函数接收不定数量的参数。*args用于接收任意数量的位置参数,而**...

    【Robotframework】列表List的常用操作.pdf

    需要注意的是,Robot Framework中的列表用`@{list}`表示,而Python中用`$list`。比较两个`@{list}`时,直接写成`$list`。例如,`Lists Should Be Equal ${list} ${list1}` 判断两个列表是否相同。 8. **Remove From...

    Python对list列表结构中的值进行去重的方法总结

    在Python编程中,处理列表(list)数据结构时,经常需要对列表中的元素进行去重操作,以确保每个元素只出现一次。本文将详细介绍几种在Python中对列表进行去重的方法,同时强调这些方法如何保持去重后列表的顺序不变...

    Python3查找列表中重复元素的个数的3种方法详解

    在Python编程中,处理列表数据时,我们常常需要找出列表中的重复元素以及它们出现的次数。本文将详细讲解三种在Python3中查找列表中重复元素个数的方法。 ### 方法一:利用集合(Set)和列表计数(count) ```...

    基于Python的重复元素判断.docx

    在Python编程中,处理列表中的重复元素是一项常见的任务。这里我们探讨了三种不同的方法来检查一个列表中是否存在重复元素,并提供了详细的解释。 1. **使用集合(Set)进行去重和比较** 集合是Python内置的一种...

Global site tag (gtag.js) - Google Analytics