如何在阅读元素时保持列表排序

时间:2013-06-24 02:27:43

标签: python algorithm

将元素读入列表并将列表与在现有排序列表中搜索新元素并插入其中的位置分开排序的有效方法是什么?

3 个答案:

答案 0 :(得分:3)

使用专门的数据结构,在Python中您可以使用bisect模块:

  

此模块支持按排序顺序维护列表,而无需在每次插入后对列表进行排序。对于具有昂贵比较操作的长项目列表,这可以是对更常见方法的改进。该模块称为bisect,因为它使用基本的二分算法来完成其工作。

答案 1 :(得分:3)

您正在寻找heapq中的功能。

  

该模块提供了堆队列算法的实现,也称为优先级队列算法。

答案 2 :(得分:0)

@Aswin的评论很有意思。如果每次插入项目时都要进行排序,则对sort()的调用是O(n)而不是通常的O(n * log(n))。这是由于sort(timsort)的实现方式。

然而,除此之外,您还需要在列表中移动一堆元素以腾出空间。这也是O(n),所以整体 - 每次调用.sort()是O(n)

没有办法让排序列表保持在比O(n)更好的状态,因为总是需要这种转换。

如果您不需要实际列表,则heapq(在@ Ignacio的答案中提到)通常会以有效的方式涵盖您需要的属性。

否则,您可能会发现许多树数据结构中的一个比列表更适合您的原因。