在不保留顺序的情况下在Python中统一列表的最快方法?我在互联网上看到了许多复杂的解决方案 - 它们能否比简单的更快:
list(set([a,b,c,a]))
答案 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,其中包含许多不同的结果。你上面提出的建议似乎是最快(最简单的)之一