在python中二进制搜索列表

时间:2018-11-19 12:59:58

标签: python binary-search

我在列表中用于二进制搜索功能的代码对于列表中的值返回true,但是对于不在列表中的值返回None(而不是false)。

有人可以解释一下我在做什么错吗?

程序为:

def searchlist(x,alist):
        end=int(len(alist)-1)
        mid=int(len(alist)/2)

        while len(alist)>2:
                if  x==alist[mid] or x==alist[0] or x==alist[end] :
                        return("true")
                        break
                elif x>alist[mid]:
                        alist=alist[mid:]
                        mid=int(len(alist)/2)
                        end=int(len(alist)-1)


                elif x<alist[mid]:
                        alist=alist[:mid]
                        mid=int(len(alist)/2)
                        end=int(len(alist)-1)

                else:
                        return("false")

aList=[2,3,5,7,9,12,14,23,34,45,67,89,101]

xnum=int(input("enter a number:"))
searchlist(xnum,aList)
print(searchlist(xnum,aList))

2 个答案:

答案 0 :(得分:1)

当函数不返回值时,您将得到None。发生这种情况是因为while循环终止了,而没有进入“ else”分支。 更好的做法是在列表中找到值时返回True(不是字符串,而是布尔值),并在循环后返回False。

答案 1 :(得分:0)

您的while循环无法捕获else语句。您不需要其他。试试这个:

def searchlist(x,alist):
    end=int(len(alist)-1)
    mid=int(len(alist)/2)
    result = False
    while len(alist)>2:
            if  x==alist[mid] or x==alist[0] or x==alist[end] :
                    result = True
            elif x>alist[mid]:
                    alist=alist[mid:]
                    mid=int(len(alist)/2)
                    end=int(len(alist)-1)

            elif x<alist[mid]:
                    alist=alist[:mid]
                    mid=int(len(alist)/2)
                    end=int(len(alist)-1)

    return result

aList=[2,3,5,7,5,67,89,101]

xnum=int(input("enter a number:"))
print(searchlist(xnum,aList))