Python 中 bisect 模块的作用是将一个数字插入到一个排好序的数组中,而不影响数组原来的排序。
换句话说是找到一个数字在一个排序数组中应该出现的位置,而它采用的是二分查找法。
既然是二分查找法首先要准备一个排好序的数组
1 | a = [1, 4, 4, 5, 6] |
我们希望知道再插入一个 4,应该出现在什么位置。
1 | import bisect |
bisect() 方法只是返回一个索引不会更改数组,另外还有 bisect_right() 和 bisect_left() 两个方法,bisect_right() 等同于 bisect() 都是从数组右侧开始查找,而 bisect() 是从左侧开始查找。
1 | bisect.bisect_left(a, 4) |
如果想要直接插入这个数字呢?可以用 insort() 方法
1 | bisect.insort(a, 4) |
这个方法没有返回值,是在原数组上做的修改,另外也还有 insort_left() 和 insort_right(),他们的作用相信你已经明白了。
说到这的话,其实标题说 bisect 是二分查找模块有点不准确,因为当数组中没有该数字时,bisect.bisect() 方法也会返回一个有效索引。所以如果我们想把它当做二分查找法的话,还需要做一些判断
1 | #!/usr/bin/env python |
最后要说的是,数组只能是正序,如果是倒序该模块不生效
1 | a.reverse() |
最近热读
扫码关注公众号,或搜索公众号“温欣爸比”
及时获取我的最新文章