使用集合的python唯一列表

Python unique list using set

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do you remove duplicates from a list in Python whilst preserving order?

我要做的是编写一个方法,该方法以一个列表作为参数,并使用一个集合返回一个列表副本,其中每个元素只出现一次,并且让新列表中的元素按照它们在原始列表中第一次出现的顺序出现。我必须为此使用一个集合,但是,我做不到这样的输出顺序是正确的,同时有一个快速的结果。如果我放这样的东西:

1
2
3
def unique(a):

return list(set(a))

并且通过了一个包含数百万个元素的列表,它会很快给我一个结果,但不会被排序。我现在得到的是:

1
2
3
4
5
6
7
8
9
def unique(a):
b = set(a)
c = {}
d = []
for i in b:
    c[a.index(i)] = i
for i in c:
    d.append(c[i])
return d

这给了我想要的结果,但速度不够快。如果我通过一个包含一百万个元素的列表,我可能要等半个小时,而上面的一行只需要不到一秒钟。我怎么解决这个问题?


1
2
3
4
>>> from collections import OrderedDict
>>> items = [1, 2, 3, 'a', 2, 4, 'a']
>>> OrderedDict.fromkeys(items).keys()
[1, 2, 3, 'a', 4]