【问题标题】:Binary Search small error Python 3.5Binary Search 小错误 Python 3.5
【发布时间】:2016-11-03 20:56:21
【问题描述】:

我正在为类创建二分搜索。

它应该显示TrueFalse,具体取决于值是否在列表中。

我无法无错误地获取最后一个元素,我的代码到目前为止:

def binarySearch(alist, value):
    first = 0                               
    last = len(alist)-1                                                  
    found = False                           

    while first <= last and not found:                    
        midpoint = (first + last)//2        
        print(midpoint)                     
        if value == midpoint:
            found = True
        else:
            if value < alist[midpoint]:
                last = midpoint-1
            else:
                first = midpoint+1

    return found


print(binarySearch([1,2,3,4,5],5))

行:last = len(alist)-1 无法识别列表中的最后一个元素?它转到最后一个,因此,如果我运行上面的代码,它将返回False,而它应该返回True

我尝试了last = len(alist),它给了我最后一个元素,但是如果我尝试搜索高于5 的数字,它会导致IndexError,而不是显示False

有什么想法吗?

【问题讨论】:

  • len(alist) 返回列表的长度。如果你想要列表的最后一个元素,你应该使用alist[len(alist) -1]
  • 快速说明,last = len(alist)%10 每次都适用于最后一个元素。
  • 我还将while循环条件更改为'''while first

标签: python function python-3.x binary-search


【解决方案1】:

您正在根据索引 midpoint 而不是数组中的值检查值。

if value == midpoint:

应该是:

if value == alist[midpoint]:

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2016-09-30
    • 1970-01-01
    • 2018-07-02
    • 2017-05-04
    • 2017-08-23
    相关资源
    最近更新 更多