bisect可以实现二分查找和插入。其函数有bisect_left,bisect_right和insert_left,insert_right。分别对应查找和插入。
由于数组中存在重复元素,所以才有left和right的区分。其含义分别是在元素的左侧以及右侧。
其定义如下:
| 定义 | 作用 |
|---|---|
| bisect_right(a, x, lo=0, hi=None) | 在数组a中查找元素x,返回符合条件的最右侧下标 |
| bisect_left(a, x, lo=0, hi=None) | 在数组a中查找元素x,返回符合条件的最左侧下标 |
| insort_right(a, x, lo=0, hi=None) | 在数组a中插入元素x,插入位置在返回符合条件的最右侧 |
| insort_left(a, x, lo=0, hi=None) | 在数组a中插入元素x,插入位置在返回符合条件的最左侧 |
查找的示例代码:
import bisect
arr = [0,1,1,1,2,2,4,4,6,6,7,8,9,9,10]
pos_right = bisect.bisect_right(arr,6)
pos_left = bisect.bisect_left(arr,6)
print(pos_right,pos_left)
结果为:
10 8
插入示例:
arr1 = [0,1,1,1,2,2,4,4,6,6,7,8,9,9,10]
arr2 = [0,1,1,1,2,2,4,4,6,6,7,8,9,9,10]
bisect.insort_right(arr1,5)
bisect.insort_left(arr2,5)
print(arr1)
print(arr2)
返回的结果其实是一样的。