正在尝试在python中创建二进制搜索
我正在尝试创建一个二进制搜索,但无法使代码适用于数字4、6、7、8和9。有人知道为什么吗正在尝试在python中创建二进制搜索,python,Python,我正在尝试创建一个二进制搜索,但无法使代码适用于数字4、6、7、8和9。有人知道为什么吗 list = [1,2,3,4,5,6,7,8,9] search = 3 first = 0 last = (len(list)-1) found = False while first <= last and not found: mid = (first+last//2) if list[mid] == search: found = True else
list = [1,2,3,4,5,6,7,8,9]
search = 3
first = 0
last = (len(list)-1)
found = False
while first <= last and not found:
mid = (first+last//2)
if list[mid] == search:
found = True
else:
if search > list[mid]:
for i in range(mid):
list.remove(list[0])
print(list)
else:
for i in range(mid):
last = (len(list)-1)
list.remove(list[last])
print(list)
if found == True:
print("Item found")
list=[1,2,3,4,5,6,7,8,9]
搜索=3
第一个=0
last=(len(列表)-1)
发现=错误
而第一个列表[mid]:
对于范围内的i(中):
列表。删除(列表[0])
打印(列表)
其他:
对于范围内的i(中):
last=(len(列表)-1)
列表。删除(列表[最后])
打印(列表)
如果找到==True:
打印(“找到的项目”)
解决方案本身非常糟糕,您正在删除原始列表中的元素,这是不必要的,也浪费了时间。此外,该列表无法用于进一步搜索
试试这个:
list = [1,2,3,4,5,6,7,8,9]
search = 3
first = 0
last = (len(list)-1)
found=False
while first <= last:
mid = first + (last-first)/2
if list[mid] == search:
found=True
break
else:
if search > list[mid]:
first=mid+1
print list[first:last+1]
else:
last=mid-1
print list[first:last+1]
if found == True:
print "Element Found"
else:
print "Element not found"
list=[1,2,3,4,5,6,7,8,9]
搜索=3
第一个=0
last=(len(列表)-1)
发现=错误
而第一个列表[mid]:
第一个=中间+1
打印列表[第一:最后+1]
其他:
last=mid-1
打印列表[第一:最后+1]
如果找到==True:
打印“找到元素”
其他:
打印“未找到元素”
更简洁的方式,无需删除任何元素。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者来说是没有用处的。这是一个二进制搜索,顺便说一句(first+last//2)马上就指出是一个错误。知道运算符优先级吗?只需在循环的每个迭代中检查
first
、last
和mid
的值,就可以告诉您所有需要知道的信息。@Dean可能想在每次迭代后查看列表,但这段代码违背了他的目的。@Nazmul在为first和last赋值时,他仍然可以通过打印列表来查看列表[first:mid-1]或列出[mid+1:last],具体取决于为相同条件添加的打印语句