Python bisect库

今天知道这个内置库,感觉眼前一亮,我费那么大劲写的代码一行就搞定啦,不禁感叹前人的智慧

1.bisect库中的常用方法

(1)bisece_right(ls,target)          #ls表示要查找的列表   target表示要比较的值 

返回:大于等于target的最小数的下标

(2)bisece_left(ls,target)          #ls表示要查找的列表   target表示要比较的值 

返回:小于等于target的最大数的下标

2.代码展示

#导入模块
from bisect import *

ls = [1,5,2,7,3,8]
print(*ls)

target = 7

#查找大于target的最小数的下标
res = bisect_right(ls,target)
print(f"最小的下标为{res},大于target的最小的数为{ls[res]}")

#查找小于等于target的最大数的下标
ans = bisect_left(ls,target)
print(f"最大的下标为{res},小于等于target的最大的数为{ls[ans]}")

3.运行结果

Python bisect库_第1张图片

4.可代替的二分查找代码

#bisect_left可代替以下代码

#二分查找方法    注意:需要针对有序数组
def min_ls(ls,target):
    #对列表进行排序
    ls.sort()                  
    
    #标记满足的数对应的下标,不满足则输出-1
    res = -1
    len_ls = len(ls)

    #初始化两个指针
    start = 0
    end = len_ls - 1
    #通过二分查找满足条件的数
    while start <= end:
        mid = (start + end) // 2
        if ls[mid] <= target:
            res = mid
            start = mid +1
        else:
            end = mid -1
    print(f'最小的数为{ls[res]}')
#函数的调用
min_ls([1,5,2,7,3,8],7)

输出结果为:7

5.力扣题目练习

https://leetcode.cn/problems/search-insert-position/submissions/

你可能感兴趣的:(数据结构,python)