【问题标题】:Python unique list using set [duplicate]使用集合的Python唯一列表[重复]
【发布时间】: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

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

【问题讨论】:

    标签: python list set


    【解决方案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)
    猜你喜欢
    • 2020-01-01
    • 2019-04-22
    • 2019-04-02
    • 2016-08-07
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多