searchList 函数索引超出范围错误

searchList function Index Out Of Range error

我的程序接受来自用户的 3 个输入:姓名、人口和县。这些详细信息成为一个数组,然后附加到另一个数组。然后用户输入县名,相应的城镇详细信息就会显示出来。

我收到有关 索引超出范围 的错误消息 searchList

def cathedralTowns():
    def searchList(myCounty, myList): #search function (doesn't work)
        index = 0
        for i in myList:
            myList[index].index(myCounty)
            index += 1
            if myList[index] == myCounty:
                print(myList[index])
    records = [] #main array
    end = False
    while end != True:
        print("\nEnter the details of an English cathedral town.")
        option = input("Type 'Y' to enter details or type 'N' to end: ")
        if option == 'Y':
            name = input("Enter the name of the town: ")
            population = int(input("Enter the population of the town: "))
            county = input("Enter the county the town is in: ")
            records.append([name, population, county]) #smaller array of details of one town
        elif option == 'N':
            print("Input terminated.")
            end = True
        else:
            print("Invalid input. Please try again.")
    print(records) #just for checking what is currently in records array
    end = False
    while end != True:
        print("\nEnter the name of an English county.")
        option = input("Type 'Y' to enter county name or type 'N' to end: ")
        if option == 'Y':
            searchForCounty = input("Enter the name of a county: ")
            searchList(searchForCounty, records) #searchList function takes over from here
        elif option == 'N':
            print("Input terminated.")
            end = True
        else:
            print("Invalid input. Please try again.") 

cathedralTowns()

您应该修改您的 searchList 函数:

def searchList(myCounty, myList):
   for entry in myList:
       if entry[2] == myCounty:
           print("Town: {}, population: {}".format(entry[0], entry[1]))

在Python中,当你迭代一个列表时,你实际上是在迭代它的元素,因此

for entry in myList

遍历列表中的每个 "record"。然后,由于您正在寻找一个县,即每个记录中的第三个元素,您使用 entry[2] 对其进行索引以将其与您的查询进行比较,即 myCounty.

对于样本记录的示例输入,例如:

records = [['Canterbury', 45055, 'Kent'], ['Rochester', 27125, 'Kent'], ['Other', 3000, 'Not Kent']]

的输出
searchList('Kent', records)

是:

>>> Town: Canterbury, population: 45055
>>> Town: Rochester, population: 27125