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

2024-09-29 02:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在切换到Python并练习一些基本的逻辑流,我编写了一个二进制搜索函数。有没有更优雅的方式写这个?例如,我不喜欢将初始的maxim设置为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)

Tags: 函数middle列表searchlenreturnif方式
1条回答
网友
1楼 · 发布于 2024-09-29 02:20:47

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

但是老实说,除非您想限制搜索,否则它似乎是一个无用的参数,但是您最好在传递列表时(而不是数组!)在您之前明确地这样做在。你知道吗

相关问题 更多 >