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

Python 通过字符串进行二进制搜索,python,binary-search,Python,Binary Search,我对python(3.3)比较陌生,我只是尝试通过一个单词列表进行二进制搜索,当涉及到循环索引时,我不知道如何修复我的操作数类型。。。我继续得到类型错误。我想不出有什么办法 def find(L, target): start = 0 end = len(L) - 1 while start <= end: middle = (start + end)// 2 midpoint = L[middle] if mi

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

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
def查找(L,目标):
开始=0
结束=长度(L)-1
启动目标时:
结束=中点-1
elif中点<目标:
起点=中点+1
其他:
返回中点
我这样调用函数:

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


查找(L,“Joe”)

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

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")
def查找(L,目标):
开始=0
结束=长度(L)-1
启动目标时:
结束=中间-1
elif中点<目标:
开始=中间+1
其他:
返回中点
L=[“布赖恩”、“乔”、“露易丝”、“梅格”、“彼得”、“斯图”需要排序。
打印查找(L,“Peter”)
def查找(L,目标):
开始=0
结束=长度(L)-1
启动目标时:
结束=中间-1
elif中点<目标:
开始=中间+1
其他:
返回中点
L=[“布赖恩”、“乔”、“露易丝”、“梅格”、“彼得”、“斯图薇”]
L=已排序(L)
打印(查找(L,“意向书”))
正如其他人所指出的,使用中点而不是中点

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

def binarySearchOnString(arr,x):
def binarySearchOnString(arr, x):
        l = 0
        r = len(arr) - 1
        while (l <= r): 
            m = (l + r) // 2 
            if (arr[m] == x): 
                return m
            elif (arr[m] < x): 
                l = m + 1
            else: 
                r = m - 1
        return -1  #   If element is not found  then it will return -1
    
            
l=0 r=len(arr)-1
虽然(l二进制搜索只适用于排序列表
middpoint
是一个字符串。
middpoint-1
应该做什么?@FernandoMatsumoto可能是一个打字错误。我想他的意思是
middle-1
middle+1
。要对数组进行成功的二进制搜索,数组中的数据必须按排序顺序进行。除了Brian a之外的所有条目都是We's out position-序列应该是Brian、Joe、Lois、Meg、Peter、Stewie。@jianweichuah我认为Fernando指出了错误。如果你试图找到一个不存在的字符串怎么办?返回了什么?@cricket\u 007 None。不确定OP的用例是
排序的(L)
返回包含
L
元素的新排序列表。使用
L=sorted(L)
L.sort()
def binarySearchOnString(arr, x):
        l = 0
        r = len(arr) - 1
        while (l <= r): 
            m = (l + r) // 2 
            if (arr[m] == x): 
                return m
            elif (arr[m] < x): 
                l = m + 1
            else: 
                r = m - 1
        return -1  #   If element is not found  then it will return -1