正在尝试在python中创建二进制搜索

正在尝试在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

我正在尝试创建一个二进制搜索,但无法使代码适用于数字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:
    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],具体取决于为相同条件添加的打印语句