2017-02-09 55 views
1

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

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) 
+0

你见过这个:https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBinarySearch.html – gregory

+2

这个问题可能比[SO]更适合[codereview.SE]。 –

+0

您的else语句中可能有逻辑错误。如果该行不是'return binary_search(val,arr,minum,middle)',与你的'elif'分支对称吗? –

回答

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

但说实话,这似乎是一个无用的参数除非你想限制搜索,但那么你不妨在你之前明确地做到这一点,当你通过列表(不是阵列y!)in。