我要做的是编写一个方法,将列表作为参数,并使用一个集合返回列表的副本,其中每个元素只出现一次,并且新列表中的元素按照它们的顺序出现首次出现在原始列表中.我必须为此使用一个集合,但是,我不能这样做,以便输出顺序正确,同时具有快速结果.如果我把这样的东西:
def unique(a):
return list(set(a))
Run Code Online (Sandbox Code Playgroud)
并传递了包含数百万个元素的列表,它会快速给我一个结果,但它不会被订购.所以我现在所拥有的是:
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
Run Code Online (Sandbox Code Playgroud)
这给了我想要的结果,但速度不够快.如果我通过一个包含一百万个元素的列表,我可能会等待半个小时,而那个上面的那个只需不到一秒钟.我怎么能解决这个问题?
>>> from collections import OrderedDict
>>> items = [1, 2, 3, 'a', 2, 4, 'a']
>>> OrderedDict.fromkeys(items).keys()
[1, 2, 3, 'a', 4]
Run Code Online (Sandbox Code Playgroud)