bisect实现了一个算法来向列表中插入元素,数据算法同时仍保持列表有序。结构
本篇,维护将详细介绍bisect库高效率的有序玩转列表。
首先,列表我们来看看bisect库是数据算法如何实现列表的插入的。具体代码如下所示:
import bisect a = [7,结构 5, 4, 1, 9, 8, 2, 3, 6, 0, 5] print(a) new_a = [] for i in a: position = bisect.bisect(new_a, i) bisect.insort(new_a, i) print(position, new_a)运行之后,效果如下:
可以看到,维护bisect会自动排序进行插入,有序position为插入的列表索引位置。当然,数据算法对于此类插入如果直接构建列表,结构然后排序,源码下载维护可能速度更快。有序不过这只仅仅对于短列表而言非常的列表快,对于非常长的列表而言,使用上面这种插入排序方式可以大大节省时间和内存,尤其是比较两个列表成员的操作需要开销很大的计算量时。
在实际的列表处理中,我们可能处理重复的值。如前文所示,多余的5是云服务器提供商默认插入到重复值右边的,也就是说相当于使用insort_right()函数。同理,那么左边我们就可以用insort_left()函数。
import bisect a = [7, 5, 4, 1, 9, 8, 2, 3, 6, 0, 5] print(a) new_a = [] for i in a: position = bisect.bisect_left(new_a, i) bisect.insort_left(new_a, i) print(position, new_a)运行之后,效果如下:
读者可以对比一下上面两个图片,最后一行的索引变化。可以看到,一个是6,一个是5,因为我们主动变更,把重复值默认插入到左边了。高防服务器