本来是想自己实现但是复杂度太高,偶然搜到 python 中有一个库 bisect 可以实现真的是太妙了 。
bisect
基本用法,使用起来很方便,其实就是在找可以插入的位置,但是不会真的插入:
1 | ini复制代码import bisect |
耗时测试,从结果来看 bisect 的速度最快:
1 | python复制代码import timeit |
bisect_left 和 bisect_right
另外还有两种常用方法,bisect_left 和 bisect_right 函数,用入处理将会插入重复数值的情况,返回将会插入的位置。
- bisect_left(seq, x) x 存在时返回 x 左侧的位置
- bisect_right(seq, x) x 存在时返回 x 右侧的位置
举例:
1 | bash复制代码print(bisect.bisect_left([2,4,7,9],2)) |
insort
把目标值插入到有序序列中,并能保持有序顺序
1 | ini复制代码arr=[2,4,7,9] |
本文转载自: 掘金