Python 二进制搜索以搜索列表

Python 二进制搜索以搜索列表,python,list,python-3.x,binary-search,Python,List,Python 3.x,Binary Search,我有一个代码,它首先将电子邮件按字母顺序排序,然后尝试使用二进制搜索从列表中搜索用户输入的电子邮件。然而,我一直被困在如何做到这一点这么长时间,并没有找到任何解决方案的错误,我得到了以及如何修复它。这是我的密码 def BubbleSort(logindata): NoSwaps = 1 N = len(logindata) logindata = list(logindata) while NoSwaps == 1: Count = 1

我有一个代码,它首先将电子邮件按字母顺序排序,然后尝试使用二进制搜索从列表中搜索用户输入的电子邮件。然而,我一直被困在如何做到这一点这么长时间,并没有找到任何解决方案的错误,我得到了以及如何修复它。这是我的密码

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()

您正在比较用户名/密码对(例如
[”tom@gmail.com“,”Password1“]
)和用户名(例如,
)tom@gmail.com“


您需要先从
loginda[middoint]
中提取用户名,然后再将其与
itemsseeded

进行比较您正在比较用户名/密码对(例如
[”tom@gmail.com“,”Password1“]
)和用户名(例如,
)tom@gmail.com“


您需要先从
loginda[middpoint]
中提取用户名,然后再将其与
itemsekend

进行比较。您可能需要
elif loginda[middpoint][0]>itemsekend:
loginda[middpoint][0]
,而不是1imagine@PatrickHaugh是的。已更正。@PatrickHaugh这消除了输出将在何处告诉用户找到项目的错误?如果找到了项目,代码将打印“找到项目”。如果找不到该项,则它不会执行任何操作。我建议您更改该选项,使其返回
True
False
,然后在您可能需要的函数之外执行打印
elif loginda[middpoint][0]>itemsseeded:
loginda[middpoint][0]
,而不是我想要的1imagine@PatrickHaugh是的。已更正。@PatrickHaugh这消除了输出将在何处告诉用户找到项目的错误?如果找到了项目,代码将打印“找到项目”。如果找不到该项,则它不会执行任何操作。我建议您更改它,使其返回
True
False
,然后在函数外部进行打印我已从中提取用户名,但代码实际上不起作用,当用户输入正确的电子邮件时,它找不到用户名?我从中提取了用户名,但代码实际上不起作用,当用户输入正确的电子邮件时,它找不到用户名?