python排序模块:bisect

今天在刷leetcode的时候遇到了一道题,981. 基于时间的键值存储,用到了bisect的函数,在这里简单介绍一下:

还有一个排序是sort和sorted,这里不做介绍

在这道题中默认升序,也就是有序,所以才可以使用bisect库,因为有序是使用bisect的前提条件

  1. insort函数
data = [2, 3, 4, 5]
bisect.insort(data, 6)
print(data)
output:
[2, 3, 4, 5, 6]

可见插入的数不会影响原来的排序

  1. bisect函数
s = bisect.bisect(data, 1)
print(s)
print(data)
output:
0
[2, 3, 4, 5, 6]

获取插入数值的位置并返回,但并不会插入

  1. bisect_left函数和bisect_right函数
left = bisect.bisect_left(data, 4)
print(left)
print(data)
right= bisect.bisect_right(data, 4)
print(right)
print(data)
output:
2
[2, 3, 4, 5, 6]
3
[2, 3, 4, 5, 6]

主要用来处理重复值的情况,返回插入的位置,和bisect函数一样不会改变原来的函数

  1. insort_left函数insort_right函数
left = bisect.insort_left(data, 4)
print(left)
print(data)
data = [2, 3, 4, 5, 6]
right= bisect.insort_right(data, 4)
print(right)
print(data)
output:
2
[2, 3, 4, 4, 5, 6]
3
[2, 3, 4, 4, 5, 6]

这两个函数会改变原来函数,其实从data结果来看,如果在插入重复数值的时候,insort_left函数insort_right函数都对data进行了相同的处理,只是插入位置不同而已。

posted @ 2021-07-10 11:17  小Aer  阅读(8)  评论(0编辑  收藏  举报  来源