2017-02-09 64 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。