bisect模块(使用二分法将数据按顺序插入一个列表)
bisect模块功能:使用二分法将数据按顺序插入一个列表
该模块主要有两个函数:
1、insort_right ====>按从小到大顺序将数据插入一个列表
2、bisect_right ====>返回一个位置。即:如果将一个数据从小到大插入一个列表则应该插在列表中的哪个位置,只是返回一个位置,并不会真的将数据插进去。
1、insort_right
1 insort_right(a, x, lo=0, hi=None) 2 3 """ 4 5 通过二分法向列表中按从小到大的顺序插入数据。a为原始列表,x为插入数据,lo为二分法初始最左边的位置,hi为二分法初始最右边位置(None时会选择列表最后一个位置) 6 7 以下为使用举例: 8 9 """ 10 11 12 a = [1, 2, 3, 5, 7] 13 14 x= 4 15 16 insort_right(a, x, lo=0, hi=None) 17 18 print(a) ===>结果为:[1, 2, 3, 4, 5, 7]
1 insort_left(a, x, lo=0, hi=None) 2 3 """ 4 5 功能和insort_right一样,都是将x按从小到大顺序插入a! 6 7 不同的是left是每次是猜x应该在二分法的右边,不对的话再把范围缩小到左边;right是先猜x应该在二分法的左边,不对的话再把范围缩小到右边。 8 9 (感觉从效率上这两种方法没有太大本质性的区别,所以用哪个都行) 10 11 """
2、bisect_right
1 bisect_right(a, x, lo=0, hi=None): 2 3 """ 4 5 通过二分法查找出应该把X插入到列表a(从小到大排序的列表)中的哪个位置,并再该位置返回。注意这个是返回位置而不是插入数据。lo和hi作用同上 6 7 以下为举例: 8 9 """ 10 11 a = [1, 2, 3, 5, 7] 12 13 x = 4 14 15 print(bisect.bisect_right(a, x)) ===>此处打印3,即应插入的位置 16 17 print(a) ===>打印结果显示a还是原来的值[1, 2, 3, 5, 7]
1 bisect_left(a, x, lo=0, hi=None): 2 3 """ 4 5 功能和insort_right一样,都是将x按从小到大顺序插入a! 6 7 不同的是left是每次是猜x应该在二分法的右边,不对的话再把范围缩小到左边;right是先猜x应该在二分法的左边,不对的话再把范围缩小到右边。 8 9 (感觉从效率上这两种方法没有太大本质性的区别,所以用哪个都行) 10 11 """