Python排序和二进制搜索索引器错误:列表索引超出范围
我正在努力理解此代码中的错误:Python排序和二进制搜索索引器错误:列表索引超出范围,python,indexing,Python,Indexing,我正在努力理解此代码中的错误: def arr_sort_binsearch(ar): ar.sort() first = 0 last = len(ar)-1 found = False item = 8 for num in ar: while first<=last and not found: midpoint = (fir
def arr_sort_binsearch(ar):
ar.sort()
first = 0
last = len(ar)-1
found = False
item = 8
for num in ar:
while first<=last and not found:
midpoint = (first + last)//2
if ar[midpoint] + num == item:
found = True
else:
if item < ar[midpoint]:
last = midpoint-1
else:
first = midpoint+1
print("{} and {} is: {}".format(num, ar[num], item))
ar = [1,3,5,7]
arr_sort_binsearch(ar)
def arr\u sort\u bin搜索(ar):
ar.sort()
第一个=0
最后一个=透镜(ar)-1
发现=错误
项目=8
对于ar中的num:
首先,我认为错误就在这句话中:
print("{} and {} is: {}".format(num, ar[num], item))
num不应是ar中的参数
干杯我认为这句话的错误在于:
print("{} and {} is: {}".format(num, ar[num], item))
num不应是ar中的参数
干杯如果您试图编写二进制搜索,则代码不正确
1、回答您的问题,为什么索引器:列表索引超出范围
:
输入列表ar
上的循环代码为num
,最后print
,元素将是ar[num]
的索引,这会引起错误,例如:
您有ar=[1,2,3,4,5,8,9,11,6]
,当循环到9
时,print
尝试使用ar[9]
,但列表中只有9个元素ar
,超过最大索引8
,这将导致索引器:列表索引超出范围
2、您的二进制搜索可以修改如下:
def arr_sort_binsearch(ar,item):
ar.sort()
first = 0
last = len(ar)-1
found = False
while first<=last and not found:
midpoint = (first + last)//2
if ar[midpoint] == item:
found = True
else:
if item < ar[midpoint]:
last = midpoint-1
else:
first = midpoint+1
return found
def arr\u sort\u bin搜索(应收账款,项目):
ar.sort()
第一个=0
最后一个=透镜(ar)-1
发现=错误
首先,如果您尝试编写二进制搜索,则代码不正确
1、回答您的问题,为什么索引器:列表索引超出范围
:
输入列表ar
上的循环代码为num
,最后print
,元素将是ar[num]
的索引,这会引起错误,例如:
您有ar=[1,2,3,4,5,8,9,11,6]
,当循环到9
时,print
尝试使用ar[9]
,但列表中只有9个元素ar
,超过最大索引8
,这将导致索引器:列表索引超出范围
2、您的二进制搜索可以修改如下:
def arr_sort_binsearch(ar,item):
ar.sort()
first = 0
last = len(ar)-1
found = False
while first<=last and not found:
midpoint = (first + last)//2
if ar[midpoint] == item:
found = True
else:
if item < ar[midpoint]:
last = midpoint-1
else:
first = midpoint+1
return found
def arr\u sort\u bin搜索(应收账款,项目):
ar.sort()
第一个=0
最后一个=透镜(ar)-1
发现=错误
首先,你能提供一个使它失败的输入吗?为什么你要在所有元素上循环,也要循环寻找一些值?为了改进你的问题,你应该包括一段显示你的问题的完全可运行的代码(我指的是一些调用你的函数的代码,一些适当的输入数据)并提供您收到的完整回溯错误。有了这些,您就更容易识别问题并提出解决方案。为什么要将num
添加到ar[middpoint]
?ar[middpoint]
不是你想要测试的项的值吗?你能提供一个使它失败的输入吗?为什么你要在所有元素上循环,也要循环寻找一些值?为了改进你的问题,你应该包括一段完全可运行的代码来展示你的问题(我的意思是一些代码调用您的函数一些适当的输入数据)并提供您收到的完整回溯错误。有了这些,您将更容易识别您的问题并提出解决方案。您为什么要将num
添加到ar[middpoint]
?不会ar[middpoint]
是否是要针对项测试的值?