注意 以下所有数组都已经排序
本篇博客将主要介绍以下几个bisect库函数的用法:
1、bisect(list, num)
2、bisect_left(list, num)
3、bisect_right(list,num)
我们在数组中进行查找的时候,一般都会出现这三种情况:1、查找的数不在数组中 2、查找的数在数组中且只有一个 3、查找的数在数组中并且有多个
下面我们依次进行讨论:
查找的数不在数组中
import bisect list1 = [1,3,5,7,9,11,11,11,11,11,13] a = bisect.bisect(list1,6) b = bisect.bisect_left(list1,6) c = bisect.bisect_right(list1,6) print(a,b,c) # 输出为 3,3,3
此时三个函数的输出值都是一样的,输出的值都是在合适的插入点索引,使得数组有序。
查找的数在数组中且只有一个
import bisect list1 = [1,3,5,7,9,11,11,11,11,11,13] a = bisect.bisect(list1,9) b = bisect.bisect_left(list1,9) c = bisect.bisect_right(list1,9) print(a,b,c) # 输出 5,4,5
bisect_left()函数的输出是num在list中的数组下标,其余两个函数的输出为组下标+1
查找的数在数组中并且有多个
import bisect list1 = [1,3,5,7,9,11,11,11,11,11,13] a = bisect.bisect(list1,11) b = bisect.bisect_left(list1,11) c = bisect.bisect_right(list1,11) print(a,b,c) # 输出是 10,5,10
bisect_left()函数的输出是num在list中最左面值的数组下标,其余两个函数的输出为最右面的数组下标+1
最后补充一个二分插入函数bisect.insort()
list2 = [] bisect.insort(list2,5) print(list2) bisect.insort(list2,6) print(list2) bisect.insort(list2,1) print(list2) bisect.insort(list2,1) print(list2) bisect.insort(list2,10) print(list2) bisect.insort(list2,0) print(list2) bisect.insort(list2,3) print(list2) bisect.insort(list2,2) print(list2)