python - Python中的二分查找,更优雅的方法?

标签 python binary-search

我正在切换到 Python 并练习一些基本的逻辑流程,并且编写了一个二分搜索函数。有没有更优雅的方式来写这个?例如,我不喜欢将初始最大值设置为 10**99(这只是包含任何实际列表大小的一种方法)。

def binary_search(val, arr, minum=0, maxim=10**99):
    if val < arr[0] or val > arr[-1]:
        return "Not in range"

    arr = arr[minum:maxim]
    middle = int(len(arr) / 2)
    maxim = len(arr)

    if val == arr[middle]:
        return middle
    elif val > arr[middle]:
        return middle + binary_search(val, arr, middle, maxim)
    else:
        return binary_search(val, arr, 0, middle)

最佳答案

如果 maxim 仅在切片中使用,None 会执行相同的操作:

def binary_search(val, arr, minum=None, maxim=None):

参见:

>>> x = [1, 2, 3, 4, 5]
>>> x[None:None]
[1, 2, 3, 4, 5]
>>> x[1:None]
[2, 3, 4, 5]
>>>

但老实说,除非您想限制搜索,否则它似乎是一个无用的参数,但是当您传递列表(不是数组!)时,您最好在您之前明确执行此操作。

关于python - Python中的二分查找,更优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42148716/

相关文章:

arrays - 确定一个值是否在排序数组中的 O 时间是多少?

java - 循环/搜索数组直到特定索引

C:两种不同的二分搜索实现,一种陷入死循环

python - Linux中调用系统命令 'history'

python - 正则表达式可选匹配运算符 : how to apply to a string of characters?

python - 从 Django 表单集中删除表单

python - 如何在Python中对字符串元素的排序列表应用二分搜索?

algorithm - float 的二进制搜索/二分法

python - AttributeError:Heroku日志上 'tuple'对象没有属性 'decode'

python - pandas.DataFrame.equals 的古怪行为