您的位置:首页 > 编程语言 > Python开发

python中list去除重复

2012-03-20 11:20 211 查看
在一篇很牛的介绍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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: