在Python中统一列表的最快方法

时间:2010-03-26 23:17:38

标签: python performance list

在不保留顺序的情况下在Python中统一列表的最快方法?我在互联网上看到了许多复杂的解决方案 - 它们能否比简单的更快:

list(set([a,b,c,a]))

5 个答案:

答案 0 :(得分:26)

转到某个集只适用于列表,以便所有项目都可以哈希 - 例如,在您的示例c = []中,您提供的代码将引发异常。对于不可清除但可比较的项目,对列表进行排序,然后使用itertools.groupby从中提取唯一项目,是最佳可用解决方案(O(N log N))。如果物品既不是可以清洗的,也不是全部可比的,那么您唯一的“最后沟渠”解决方案是O(N squared)

您可以通过按顺序尝试每种方法,使用try / except围绕第一个和第二个(以及{{{{{{{ 1}}结果要么在return子句的末尾,要么优雅地在try语句的else子句中; - )。

答案 1 :(得分:23)

set([a, b, c, a])

如果可能,请将其保留为该格式。

答案 2 :(得分:3)

Tim Peters在2001年(在引入集合之前)为这个问题写了一个经典的一般 cookbook recipe。 Alex Martelli,Raymond Hettinger等人的评论内容丰富,包括更新使用套装等。

答案 3 :(得分:1)

Peter Bengtsson的这个updated post表明,在Python 3.6+中制作一系列独特项目的两种最快方法是:

# Unordered (hashable items)
list(set(seq))

# Order preserving
list(dict.fromkeys(seq))

答案 4 :(得分:0)

查看this post,其中包含许多不同的结果。你上面提出的建议似乎是最快(最简单的)之一