使用set的Python唯一列表

时间:2012-10-14 02:33:56

标签: python list set

  

可能重复:
  How do you remove duplicates from a list in Python whilst preserving order?

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

def unique(a):

return list(set(a))

并传递了包含数百万个元素的列表,它会快速给我一个结果,但不会被订购。 所以我现在所拥有的是:

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 个答案:

答案 0 :(得分:7)

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