在Python中进行二进制搜索,更优雅的方法?

时间:2017-02-09 23:15:00

标签: 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)

1 个答案:

答案 0 :(得分:1)

如果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]
>>>

但老实说,除非你想限制搜索,否则它似乎是一个无用的参数,但是当你传递列表(不是数组!)时,你可能会明确地做到这一点。