【发布时间】:2018-11-14 09:03:28
【问题描述】:
我正在使用标准的二进制搜索算法,该算法将整数值作为参数,并在列表中搜索整数。但是,我希望能够找到列表中与搜索值匹配的每个整数的位置索引。到目前为止我所拥有的是:
def bin_search(x):
my_list = [57,68,76,77,82,86,89,89,89,98,100]
bottom = 0
top = len(my_list)-1
found = False
location = -1
while(bottom <= top) and not(found):
middle = int((bottom + top)//2)
if(my_list[middle] == x):
location = middle
found = True
else:
if x < my_list[middle]:
top = middle - 1
else:
bottom = middle + 1
return location
print(bin_search(89))
任何有助于使这个二分搜索能够找到两个值的帮助将不胜感激!
【问题讨论】:
-
发布堆栈跟踪。 在哪里你得到错误?
-
你为什么要列出
location?我敢打赌这是你错误的根源。 -
你需要重新发明轮子吗? The
bisectmodule 提供的 API 可以直接确定给定值的 the left 和 right 边界(或者您直接向左并开始线性扫描,直到到达相同值的运行结束)。 -
我把它做成了一个列表,这样我就可以为这个位置存储多个值。
-
@Newoej
bisect是二分查找。见the docs。 (并且,当您使用它时,请注意文档链接到源代码,因此如果您不确定他们是如何完成某些特定功能的,您只需单击并查看他们是如何做到的。)
标签: python binary-search