我想要做的是编写一个方法,它以列表作为参数,并使用集合来返回列表的副本,其中每个元素只出现一次,并且新列表中的元素按其在原始列表中第一次出现的顺序排列。我必须使用一个集合来实现这个目的,但是我无法使输出结果正确排序并且速度快。如果我像这样输入:
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
这个方法给出了我想要的结果,但速度不够快。如果我传递一个包含一百万个元素的列表,可能需要等待半个小时,而上面那个一行代码只需要不到一秒钟。我该如何解决这个问题?
items = [1, 2, 3, 'a', 2, 4, 'a']; s = set(); filter(lambda i: not i in s and not s.add(i), items)
- thierrybm