1 | import bisect |
使用Bisect二分查找模块前必须保证列表已经是有序的,bisect模块提供以下功能:
- bisect:返回待插入元素的插入位置,保证数组仍然有序;
- bisect(a,x,lo=0,hi=len(a)):如果相同,则插入右侧,满足all(val > x for val in a[i:hi]),all(val <= x for val in a[lo:i])
- bisect_left:如果相同则插入左侧,all(val < x for val in a[lo:i]), all(val >= x for val in a[i:hi])
- bisect_right:同bisect
- insort:将给定元素插入到有序表中,保证数组仍然有序;
- insort(a,x,lo=0,hi=len(a)):等价于a.insert(bisect.bisect(a, x, lo, hi), x)
- insort_left:等价于a.insert(bisect.bisect_left(a, x, lo, hi), x)
- insort_right:等价于insort
1 | a = [2,3,4,5,6,6,10] |
bisect
1 | bisect.bisect(a,6) |
6
1 | bisect.bisect(a,6.1) |
6
1 | bisect.bisect_left(a,6) |
4
1 | bisect.bisect_left(a,6.1) |
6
1 | bisect.bisect_right(a,6) |
6
1 | bisect.bisect_right(a,6.1) |
6
insort
1 | a = [2,3,4,5,6,6,10] |
1 | bisect.insort(a,6) |
[2, 3, 4, 5, 6, 6, 6, 10]
1 | bisect.insort(a,6.1) |
[2, 3, 4, 5, 6, 6, 6, 6.1, 10]
1 | bisect.insort_left(a,4) |
[2, 3, 4, 4, 5, 6, 6, 6, 6.1, 10]
1 | bisect.insort_right(a,10) |
[2, 3, 4, 4, 5, 6, 6, 6, 6.1, 10, 10]
常用查询操作
1 | def index(a, x): |