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

Voj*_*lko 22 python performance list

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

list(set([a,b,c,a]))
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 26

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

您可以编写一个函数来"统一"任何使用最佳可用方法的列表,方法是按顺序尝试每个方法,在第一个和第二个周围使用try/ except(return结果或者在try子句结尾处,或者,优雅地,在声明的一个else条款中try;-).


Mat*_*ner 23

set([a, b, c, a])
Run Code Online (Sandbox Code Playgroud)

如果可能,请保留该格式.

  • 值得注意的是,这假设列表中的所有元素都是**可以**(参见[Pyhon词汇表](http://docs.python.org/glossary.html)) (4认同)
  • 您可以迭代集合并测试集合中的成员资格,因此如果您不需要订单则转换回列表是不必要的. (3认同)

pyl*_*ang 6

Peter Bengtsson 的这篇更新文章提出了在 Python 3.6+ 中创建唯一项目列表的两种最快方法:

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

# Order preserving
list(dict.fromkeys(seq))
Run Code Online (Sandbox Code Playgroud)