使用集合的Python唯一列表[重复]
Posted
技术标签:
【中文标题】使用集合的Python唯一列表[重复]【英文标题】:Python unique list using set [duplicate] 【发布时间】:2012-10-04 10:27:36 【问题描述】:可能重复: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】:>>> from collections import OrderedDict
>>> items = [1, 2, 3, 'a', 2, 4, 'a']
>>> OrderedDict.fromkeys(items).keys()
[1, 2, 3, 'a', 4]
【讨论】:
谢谢,但我需要以某种方式合并一组。有什么办法吗? @user1744238 我的解决方案是你能得到的最有效的解决方案,但如果出于某种原因你真的需要使用我猜想的一组作业,那么请看这个:@ 987654321@ 使用集合的类似方式(但上面的答案再次更好,不使用集合):items = [1, 2, 3, 'a', 2, 4, 'a']; s = set(); filter(lambda i: not i in s and not s.add(i), items)
以上是关于使用集合的Python唯一列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章