今天在写LeetCode时,发现自己的二分查找写的不对了,去看看别的题解发现Python中原来有可以调用的二分查找,于是就学习了bisect函数。
函数:bisect(List, a)
作用:返回在List插入a的位置
bisect函数简单来说就是二分查找函数,但也不完全是,更准确的来说是查找在有序数列中插入新元素的下标, bisect函数需要import bisect,而bisect函数又分为bisect_right(bisect的别名)和bisect_left,而bisect_left 函数与bisect 函数之间的区别是:
bisect_left 函数会返回原序列中跟被插入元素相等的元素位置
bisect 函数会返回原序列中跟被插入元素相等的元素之后的位置
换一种方式理解就是:
bisect_left函数返回的位置的前一位(如果有的话)的值小于所插入的元素,后一位(如果有的话)大于或等于插入的元素。
bisect函数返回的位置的前一位(如果有的话)的值小于或等于所插入的元素,后一位(如果有的话)大于插入的元素。
这么两种说法可能都比较难理解,接下来个例子方便理解:
有这样一个数列:
index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
num[i] | 1 | 1 | 2 | 3 | 5 | 7 | 12 |
接着调用bisect_right 和 bisect_left:
这样就很容易理解了
这里还推荐一个函数,就是insort()函数,用法和bisect()差不多,但insort()会直接将数插入列表。