4

可能重复:
如何在 Python 列表中删除重复项,同时保持顺序?

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

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

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

4

1 回答 1

8
>>> from collections import OrderedDict
>>> items = [1, 2, 3, 'a', 2, 4, 'a']
>>> OrderedDict.fromkeys(items).keys()
[1, 2, 3, 'a', 4]
于 2012-10-14T02:35:31.503 回答