1 概述
这是一个免费的二分查找实现和快速插入有序序列的工具。也就是说,你可以使用:
import bisect
bisect.insort(list, element)
一个元素插入列表中, 而你不需要再次调用 sort() 来保持容器的排序, 因为这在长序列中这会非常昂贵.
查找: bisect(array, item)
插入: insort(array,item)
2 查找
import bisect
a = [1,4,6,8,12,15,20]
position = bisect.bisect(a,13)
print(position)
# 用可变序列内置的insert方法插入
a.insert(position,13)
print(a)
3 插入
使用bisect.insort,比bisect先查找该插入哪个位置,再用insert方法插入更加快速的方法
import bisect
a = [1,4,6,8,12,15,20]
bisect.insort(a,13)
print(a)
4 补充
bisect还有bisect_left,insort_left的用法,和不带left的用法的区别是:当插入的元素和序列中的某一个元素相同时,该插入到该元素的前面(左边,left),还是后面(右边);
如果是查找,则返回该元素的位置还是该元素之后的位置。
import math
import cmath
import string
import sys
import bisect
from queue import Queue,LifoQueue,PriorityQueue
from itertools import permutations,combinations
from collections import deque,Counter
if __name__=='__main__':
a=[1,4,6,8,12,15,20]
b=bisect.bisect_left(a,7)
d=bisect.bisect_right(a,7)
c=bisect.bisect(a,1)
bisect.insort_right(a,12)
print(b)
print(d)
print(c)
print(a)