python bisect模块二分法查找

#!/usr/bin/env python  
# encoding: utf-8
import bisect
import sys
#将一个元素插入到一个有序列表的合适位置
#使用这个模块的函数前先确保操作的列表是已排序的。
list=[2,1,3,4,2,4,6,6,62,1]
list.sort()
new_list=bisect.insort(list,7)#后面的这个参数表示 元素7应该出现在列表的位置,
left_list=bisect.insort_left(list,7)#后面的这个参数表示 元素7应该出现在列表的位置,如果重复插入在左边
right_list=bisect.insort_right(list,7)#后面的这个参数表示 元素7应该出现在列表的位置,如果重复插入在右边
left_postion=bisect.bisect_left(list,7)
right_postion=bisect.bisect_right(list,7)#返回出现数字的右侧位置,如果不存在则获取应该插入到列表的右侧位置(一般用于原列表有该数据的时候)
#
# print(list) #结果[1, 1, 2, 2, 3, 4, 4, 6, 6, 7, 62]
#
# print(new_list)  #insort方法不会产生新的列表,输出为None
# print(left_list) #insort_left方法不会产生新的列表,输出为None
# print(right_list) #insort_left方法不会产生新的列表,输出为None
print(right_postion)
#  bisect_left 和 bisect_right 函数,该函数用入处理将会插入重复数值的情况,返回将会插入的位置

  相当于下面的代码

 

#!/usr/bin/env python  
# encoding: utf-8
import math
#给定一个list用二分法查出现的位置,前提排好序了
def binary_search_loop(lst,value):
    low,hight=0,len(lst)-1  #列表中元素的坐标
    while low<=hight:
        mid=math.floor((low+hight)/2) #向下取整
        #如果中间这个数小于指定数字,则网上查找
        if lst[mid]<value:
            low=mid+1
        elif lst[mid]>value:
            hight=mid-1
        else:
            return mid
    return  None



print(binary_search_loop([1,2,3,4,5,6,7,8,9,11],8))

  

关于二分法查找的知识,点击我

posted @ 2018-04-23 10:44  公众号python学习开发  阅读(337)  评论(0编辑  收藏  举报