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))
关于二分法查找的知识,点击我