1、bisect
是用来处理已排序的序列 ,即用来维持已排序的升序序列。
在源码的bisect.py
文件中,它的structure
是:insort
,bisect
,insort_right
,insort_left
,bisect_right
,bisect_left
。大致就是实现插入操作和查找操作(用的二分)。
import bisect
#二分查找
inter_list = []
bisect.insort(inter_list, 3)
bisect.insort(inter_list, 2)
bisect.insort(inter_list, 5)
bisect.insort(inter_list, 1)
bisect.insort(inter_list, 6)
print(inter_list) # [1,2,3,5,6]
可以看到返回的是一个完整的排序序列。
现在我们要插入一个新的数据,并查找它在序列中的位置。
# [1, 2, 3, 5, 6]
print(bisect.bisect(inter_list, 3))
# 3
# 在序列下标为3的位置插入
源码中bisect
默认为bisect_right
方法。也就是重复元素的后一个位置。
bisect_left
则是在重复元素的前一个位置插入。
# [1, 2, 3, 5, 6]
print(bisect.bisect_left(inter_list, 3))
# 2
2、小节
一开始定义的inter_list = []
不是只能用列表,任何可修改的序列类型其实都可以。比如一个双端队列。
import bisect
from collections import deque
inter_list = deque()
bisect.insort(inter_list, 3)
bisect.insort(inter_list, 2)
bisect.insort(inter_list, 5)
bisect.insort(inter_list, 1)
bisect.insort(inter_list, 6)
print(bisect.bisect_left(inter_list, 3))
print(inter_list)
# 2
# deque([1, 2, 3, 5, 6])