Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用set的Python唯一列表_Python_List_Set - Fatal编程技术网

使用set的Python唯一列表

使用set的Python唯一列表,python,list,set,Python,List,Set,可能重复: 我正在尝试编写一个方法,该方法将列表作为参数,并使用集合返回列表的副本,其中每个元素只出现一次,并且让新列表中的元素按照它们在原始列表中第一次出现的顺序出现。我必须为此使用一个集合,但是,我无法使它在快速产生结果的同时使输出处于正确的顺序。 如果我这样说: def unique(a): return list(set(a)) 通过一个包含数百万个元素的列表,它会很快给我一个结果,但不会排序。 所以我现在得到的是: def unique(a): b = set(a) c = {}

可能重复:

我正在尝试编写一个方法,该方法将列表作为参数,并使用集合返回列表的副本,其中每个元素只出现一次,并且让新列表中的元素按照它们在原始列表中第一次出现的顺序出现。我必须为此使用一个集合,但是,我无法使它在快速产生结果的同时使输出处于正确的顺序。 如果我这样说:

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

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

谢谢,但我需要以某种方式合并一个集合。有什么方法可以做到这一点吗?@user1744238我的解决方案是你能得到的最有效的解决方案,但是如果出于某种原因你真的需要使用一个集合,我猜是为了一个赋值,那么请看以下内容:使用集合的类似方法(但是上面的答案更好,不使用集合):
items=[1,2,3'a',2,4'a'];s=集合();过滤器(lambda i:s中的非i和s.add(i),items)
>>> from collections import OrderedDict
>>> items = [1, 2, 3, 'a', 2, 4, 'a']
>>> OrderedDict.fromkeys(items).keys()
[1, 2, 3, 'a', 4]