Python中的二进制搜索,更优雅的方法?
问题描述:
我正在切换到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)
答
如果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。
你见过这个:https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBinarySearch.html – gregory
这个问题可能比[SO]更适合[codereview.SE]。 –
您的else语句中可能有逻辑错误。如果该行不是'return binary_search(val,arr,minum,middle)',与你的'elif'分支对称吗? –