当前位置: 首页 > 科技观察

Python数据结构与算法—维护有序列表bisect

时间:2023-03-12 17:06:50 科技观察

Python数据结构与算法——维护有序列表在这篇文章中,我们将详细介绍bisect库的高效fun列表。有序插入首先,我们看一下bisect库是如何实现列表插入的。具体代码如下:importbisecta=[7,5,4,1,9,8,2,3,6,0,5]print(a)new_a=[]foriina:position=bisect.bisect(new_a,i)bisect.insort(new_a,i)print(position,new_a)运行后,效果如下:可以看到bisect会自动排序插入,position为插入的索引位置。当然,对于这种插入,如果直接构造列表,然后排序,可能会更快。但是,这对于短列表来说非常快。对于很长的列表,使用上面的插入排序方法可以大大节省时间和内存,尤其是比较两个列表成员的操作需要昂贵的计算。测量时。重复值处理在实际的列表处理中,我们可能会处理重复值。如上图,多余的5默认插入到重复值的右边,相当于使用了insort_right()函数。同理,我们可以在左侧使用insort_left()函数。importbisecta=[7,5,4,1,9,8,2,3,6,0,5]print(a)new_a=[]foriina:position=bisect.bisect_left(new_a,i)bisect.insort_left(new_a,i)print(position,new_a)运行后,效果如下:读者可以对比上面两张图,最后一行的索引发生了变化。可以看出,一个是6,一个是5,因为我们主动更改,默认向左插入了重复值。