python - 递归二分查找,通过切片进行分类
问题描述
我正在尝试使用递归在整数列表上实现二进制搜索,并通过每次对列表进行切片来“消除”一半的项目。我写了一些,如果达到目标值,我有点卡在我应该返回“True”的部分。迭代地,我会检查“左”是否大于“右”,但我想让函数的参数尽可能简单。
def binary_search(iterable, target):
left_index = 0
right_index = len(iterable)
mid = (left_index + right_index) // 2
if iterable[mid] == target:
return True
elif iterable[mid] < target:
iterable = iterable[mid:right_index]
print(iterable)
binary_search(iterable,target)
elif iterable[mid] > target:
iterable = iterable[left_index:mid]
print(iterable)
binary_search(iterable,target)
解决方案
False
如果找不到该值,则返回以下内容;否则返回索引。二分查找递归执行。
代码的关键补充是return
调用函数。我添加了一些逻辑,如果值不在可迭代对象中,则return a+b if a != False else a
处理返回。False
def binary_search(iterable, target):
# if the list is down to one element, and it isn't the target, return False
if len(iterable) == 1 and iterable[0] != target: return False
left_index = 0
right_index = len(iterable)
mid = (left_index + right_index) // 2
if iterable[mid] == target:
return mid
elif iterable[mid] < target:
iterable = iterable[mid:right_index]
v = binary_search(iterable,target)
# if v is not False, add it to the left side of the window and return
# else return False
return v + mid if v != False else v
elif iterable[mid] > target:
iterable = iterable[left_index:mid]
v = binary_search(iterable,target)
return v + left_index if v != False else v
推荐阅读
- haskell - purescript 中的应用函子和记录
- python - 在 PYTHON 中用 Newton Raphson 方法实现三角函数的结果错误
- php - 如何多次运行 PHP 脚本并将参数传递给它?
- python - 为 Boxplot 自定义 Seaborn Hue Legend
- reactjs - 无法将数据传递给子反应组件
- python - 使用打印功能时如何修复重复数据?
- android - Unity 在 Android 上登录 anynomous
- swift - CompactMapValues 不适用于这个简单的字典
- python - MacPorts- 端口:找不到命令?
- slack - 我们可以为松弛消息实现倒计时功能吗?