我正在切换到 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)
最佳答案
如果 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]
>>>
但老实说,除非您想限制搜索,否则它似乎是一个无用的参数,但是当您传递列表(不是数组!)时,您最好在您之前明确执行此操作。
关于python - Python中的二分查找,更优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42148716/