通过字符串进行二进制搜索

2024-05-18 15:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python(3.3)还比较陌生,我只是尝试在一个单词列表中进行二进制搜索,当涉及到循环索引时,我不知道如何修复操作数类型。。。我继续得到TypeError。想不出办法绕过它

def find(L, target):
    start = 0
    end = len(L) - 1

    while start <= end: 
        middle = (start + end)// 2 
        midpoint = L[middle]
        if midpoint > target:
            end = midpoint - 1
        elif midpoint < target:
            start = midpoint + 1
        else:
            return midpoint

我这样调用函数:

L=[“布莱恩”,“梅格”,“彼得”,“乔”,“斯图伊”,“露易丝”]

查找(L,“Joe”)


Tags: 类型middletarget列表lendef二进制find
2条回答
def find(L, target):
    start = 0
    end = len(L) - 1
    while start <= end:
        middle = (start + end)// 2
        midpoint = L[middle]
        if midpoint > target:
            end = middle - 1
        elif midpoint < target:
            start = middle + 1
        else:
            return midpoint

    L = ["Brian", "Joe", "Lois", "Meg", "Peter", "Stewie"]
    L = sorted(L)
    print(find(L, "Lois"))

如其他人所指出的,使用中间点而不是中间点

要优化使用二进制搜索,请先对列表排序

您的逻辑似乎很好,除了输入和中间点递增和递减而不是中间点的错误。

def find(L, target):
    start = 0
    end = len(L) - 1

    while start <= end:
        middle = (start + end)/ 2
        midpoint = L[middle]
        if midpoint > target:
            end = middle - 1
        elif midpoint < target:
            start = middle + 1
        else:
            return midpoint

L = ["Brian", "Joe", "Lois", "Meg", "Peter", "Stewie"] # Needs to be sorted.

print find(L, "Peter")

相关问题 更多 >

    热门问题