Python:按出现顺序排列的唯一列表项

问题描述 投票:0回答:2

在 Python 中,我们可以使用

L
获取列表
set(L)
的唯一项。但是,这样做会破坏值在原始列表中的显示顺序。有没有一种优雅的方法可以按照列表中出现的顺序获取独特的项目?

python list set unique
2个回答
10
投票

如果列表中的所有项目都是hashable,那么字典可以用于保序重复数据删除:

L = list(dict.fromkeys(L))

对于较旧的 Python 版本(<= 3.6) where dictionaries don't preserve ordering, you can do the same thing using a

collections.OrderedDict
.

如果任何列表项不可散列,将会有一个

TypeError
。在这种情况下,您可以使用替代方法,尽管复杂性将从 O(n) 降低到 O(n^2)。我建议你参考 Patrick Haugh 的 answer


1
投票
l = []
for item in list_:
    if item not in l:
        l.append(item)

对于非常大的、多样化的

list_
,这会变得很慢。在这些情况下,跟踪一组可见值也是值得的。

© www.soinside.com 2019 - 2024. All rights reserved.