Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表列表中搜索郊区_Python_Search_Binary_Binary Search - Fatal编程技术网

Python 在列表列表中搜索郊区

Python 在列表列表中搜索郊区,python,search,binary,binary-search,Python,Search,Binary,Binary Search,我有一个列表,其中包含一组邮政编码和与之匹配的郊区。我需要创建一个迭代二进制搜索算法,要求用户输入郊区的名称,然后程序输出郊区所属的邮政编码。列表如下所示: 因此,如果我对它进行二进制搜索,用户输入“詹姆斯敦”,那么程序将输出“4001”。这是我创建二进制搜索函数的步骤: suburb = input("Please enter the name of a suburb: ") def binarySearch(L, target): low = 0

我有一个列表,其中包含一组邮政编码和与之匹配的郊区。我需要创建一个迭代二进制搜索算法,要求用户输入郊区的名称,然后程序输出郊区所属的邮政编码。列表如下所示:

因此,如果我对它进行二进制搜索,用户输入“詹姆斯敦”,那么程序将输出“4001”。这是我创建二进制搜索函数的步骤:

    suburb = input("Please enter the name of a suburb: ")

    def binarySearch(L, target):
        low = 0
        high = len(L)-1
        while low <= high:
            mid = (low + high)//2
            if L[mid] == target:
                return mid
            elif L[mid] > target:
                high = mid-1
            else:
                low = mid+1
    binarySearch(L, suburb) 
TypeError:“list”和“str”的实例之间不支持“>”


我真的不知道如何解决这个问题,任何帮助都将不胜感激。谢谢

用字典就可以了。让生活更轻松:

>>> d = {key: val for (val, key) in L}
>>> d['Jamestown']
'4001'

用字典就可以了。让生活更轻松:

>>> d = {key: val for (val, key) in L}
>>> d['Jamestown']
'4001'

对于这类问题,如果您可以将数据结构为字典,您的情况会更好,例如:

zips = { 'Charlestown': 4000, 'Jamestown': 4001,'Henrytown': 4002}
然后,您可以通过一个步骤查找任何郊区的邮政编码:

zips['Charlestown']
将评估:

4000
如果您要查找这些数据,并且由于某种原因,这些数据是在列表中提供给您的,那么您可以将列表转换为字典。这个问题在这里得到了很好的回答:


如果你被迫使用一个奇怪的数据结构来做家庭作业练习,请参见下面我为你提供的单独答案。

对于这类问题,如果你能将数据结构为字典,你会过得更好,例如:

zips = { 'Charlestown': 4000, 'Jamestown': 4001,'Henrytown': 4002}
然后,您可以通过一个步骤查找任何郊区的邮政编码:

zips['Charlestown']
将评估:

4000
如果您要查找这些数据,并且由于某种原因,这些数据是在列表中提供给您的,那么您可以将列表转换为字典。这个问题在这里得到了很好的回答:


如果你被迫使用一个奇怪的数据结构来做家庭作业练习,请参见下面我为你提供的单独答案。

如果你真的打算使用列表,例如,如果这是家庭作业

认识到您正在使用列表列表。因此,当您试图将第i个列表L[i]与郊区的值进行比较时,您是在比较内部列表,例如,[4000,‘查尔斯顿’与‘查尔斯顿’

相反,你会想把L[i][1]和郊区进行比较

此外,即使您修复了所提供的数据,函数也不会提供您想要的(尽管您将避免错误消息)。二进制搜索很好,但它需要根据您搜索的值对数据进行排序

这里有一个建议:

sorted(L, key=lambda L_inner: L_inner[1])

看看你是否能自己想出如何实现这一点。一些文档:

如果你真的打算使用列表,例如,如果这是为了家庭作业

认识到您正在使用列表列表。因此,当您试图将第i个列表L[i]与郊区的值进行比较时,您是在比较内部列表,例如,[4000,‘查尔斯顿’与‘查尔斯顿’

相反,你会想把L[i][1]和郊区进行比较

此外,即使您修复了所提供的数据,函数也不会提供您想要的(尽管您将避免错误消息)。二进制搜索很好,但它需要根据您搜索的值对数据进行排序

这里有一个建议:

sorted(L, key=lambda L_inner: L_inner[1])

看看你是否能自己想出如何实现这一点。一些文档:

在这种情况下,您只需要修改二进制搜索函数。错误是将列表与字符串进行比较(请参阅异常消息)。这是因为这一行:

L[mid] > target
其中L[mid]是一个元组,目标是一个字符串。改为使用
L[mid][1]>target

def binarySearch(L, target):
    low = 0
    high = len(L)-1
    while low <= high:
        mid = (low + high)//2
        if L[mid][1] == target:
            return mid
        elif L[mid][1] > target:
            high = mid-1
        else:
            low = mid+1
def二进制搜索(L,目标):
低=0
高=透镜(L)-1
虽然目标较低:
高=中1
其他:
低=中+1

注意:仅当您的列表按您的城镇名称排序时,此功能才起作用,否则您的搜索方向会错误

在这种情况下,您只需修改二进制搜索功能即可。错误是将列表与字符串进行比较(请参阅异常消息)。这是因为这一行:

L[mid] > target
其中L[mid]是一个元组,目标是一个字符串。改为使用
L[mid][1]>target

def binarySearch(L, target):
    low = 0
    high = len(L)-1
    while low <= high:
        mid = (low + high)//2
        if L[mid][1] == target:
            return mid
        elif L[mid][1] > target:
            high = mid-1
        else:
            low = mid+1
def二进制搜索(L,目标):
低=0
高=透镜(L)-1
虽然目标较低:
高=中1
其他:
低=中+1

注意:仅当您的列表按您的城镇名称排序时,此选项才有效。否则,您的搜索方向错误

问题在于您有一个多维数组,并且您试图将其与郊区的名称相匹配。您需要匹配每个嵌套数组的第二个元素

   def binarySearch(L, target):
    low = 0
    high = len(L)-1
    while low <= high:
        mid = (low + high)/2
        if L[mid][1] == target:
            return L[mid][0]
        elif L[mid][1] > target:
            high = mid-1
        else:
            low = mid+1
def二进制搜索(L,目标):
低=0
高=透镜(L)-1
虽然目标较低:
高=中1
其他:
低=中+1

请注意,我还返回了L[mid][0],这将为您提供pincode而不是元素编号。

问题在于您有一个多维数组,并且您正在尝试将其与郊区的名称相匹配。您需要匹配每个嵌套数组的第二个元素

   def binarySearch(L, target):
    low = 0
    high = len(L)-1
    while low <= high:
        mid = (low + high)/2
        if L[mid][1] == target:
            return L[mid][0]
        elif L[mid][1] > target:
            high = mid-1
        else:
            low = mid+1
def二进制搜索(L,目标):
低=0
高=透镜(L)-1
虽然目标较低:
高=中1
其他:
低=中+1

请注意,我还返回了L[mid][0]这将为您提供pincode而不是元素编号。

我了解这一点,但不知道如何解决问题。我了解这一点,但不知道如何解决问题。不幸的是,该任务要求我使用二进制搜索函数。不幸的是,该任务要求我使用二进制搜索函数。该任务要求我使用二进制搜索函数。该任务要求我使用二进制搜索函数。这对我来说很有意义,但我不确定如何在代码中实现它。我需要一个for循环吗?首先,你看到在你的代码中,你把列表和