python排序模块:bisect
今天在刷leetcode的时候遇到了一道题,981. 基于时间的键值存储,用到了bisect的函数,在这里简单介绍一下:
还有一个排序是sort和sorted,这里不做介绍
在这道题中默认升序,也就是有序,所以才可以使用bisect库,因为有序是使用bisect的前提条件
- insort函数
data = [2, 3, 4, 5]
bisect.insort(data, 6)
print(data)
output:
[2, 3, 4, 5, 6]
可见插入的数不会影响原来的排序
- bisect函数
s = bisect.bisect(data, 1)
print(s)
print(data)
output:
0
[2, 3, 4, 5, 6]
获取插入数值的位置并返回,但并不会插入
- 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函数一样不会改变原来的函数
- 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进行了相同的处理,只是插入位置不同而已。