在 Python 中,最快的去重方法是什么?不需要保留顺序。我在网上看到了许多复杂的解决方案 - 它们是否比以下简单方法更快:
list(set([a,b,c,a]))
在 Python 中,最快的去重方法是什么?不需要保留顺序。我在网上看到了许多复杂的解决方案 - 它们是否比以下简单方法更快:
list(set([a,b,c,a]))
去重仅适用于所有项都是可哈希的列表,例如在您的示例中如果c = []
,则您提供的代码将引发异常。对于不可哈希但可比较的项目,排序列表,然后使用itertools.groupby
从中提取唯一项是最佳选择(O(N log N))。如果项目既不全是可哈希的,也不全是可比较的,则您的"最后一招"解决方案只能是O (N squared)
。
您可以编写一个函数来“去重”任何列表,并使用最佳可用方法尝试每个方法,第一个和第二个方法需要在其周围使用try
/except
(并在try
子句结束时返回结果或者更优雅地,在try
语句的else
子句中返回结果;-)。
set([a, b, c, a])
如果可能的话,请将其保留在那种形式下。
这篇由Peter Bengtsson 更新的文章 提供了两种在Python 3.6+中制作唯一项目列表的最快方法:
# Unordered (hashable items)
list(set(seq))
# Order preserving
list(dict.fromkeys(seq))