二进制搜索以搜索列表

时间:2017-01-05 21:10:35

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

我有一个代码,首先按字母顺序对电子邮件进行排序,然后尝试使用二进制搜索从列表中搜索用户输入的电子邮件。但是,我一直坚持如何做这么久,并没有找到任何解决方案我得到的错误以及如何解决它。这是我的代码

def BubbleSort(logindata):
    NoSwaps = 1
    N = len(logindata)
    logindata = list(logindata)
    while NoSwaps == 1:
        Count = 1
        NoSwaps = 0
        for Count in range(N-1):
            if logindata[Count] > logindata[Count+1]:
                temp = logindata[Count]
                logindata[Count] = logindata[Count+1]
                logindata[Count+1]=temp
                NoSwaps=1
    return tuple(logindata)

def BinarySearch(logindata,ItemSought):
    First=0
    Last=len(logindata)-1
    ItemFound = False
    SearchFailed = False
    while ItemFound == False or SearchFailed == False:
        Midpoint = (First + Last) // 2
        if logindata[Midpoint] == ItemSought:
            ItemFound = True
            print("Item Found")
            break

        elif logindata[Midpoint] > ItemSought:
            Last = Midpoint - 1
        else:
            First = Midpoint + 1

if __name__ == "__main__":
    logindata=["tom@gmail.com","Password1"],["harry@gmail.com","Password2"],["jake@gmail.com","Password3"]
    logindata=BubbleSort(logindata)
    print(logindata)
    ItemSought=input("Enter username")
    BinarySearch(logindata,ItemSought)

我目前得到的错误是:

elif logindata[Midpoint] > ItemSought:
TypeError: unorderable types: list() > str()

1 个答案:

答案 0 :(得分:2)

您正在将用户名/密码对(例如["tom@gmail.com","Password1"])与用户名(例如"tom@gmail.com")进行比较。

您需要从logindata[Midpoint]中提取用户名,然后再将其与ItemSought进行比较。