• 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))
    

      

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

  • 相关阅读:
    PyCharm 2017.1.3版本破解
    Python 字典
    Python 列表和元组
    总结2016,展望2017
    使用MATLAB对图像处理的几种方法(下)
    使用MATLAB对图像处理的几种方法(上)
    忍不住想,我为什么要来大城市?
    学习技术的心得
    Net中的常见的关键字
    面向对象的JS(一)
  • 原文地址:https://www.cnblogs.com/c-x-a/p/8916461.html
Copyright © 2020-2023  润新知