未更新对象列表索引:索引错误:lis

2024-09-28 03:12:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,我会一直忽略不重要的信息:

class BuildMap:
def __init__(self):
    #Constructor
    self.nodes = []

def indexmap(self):
        for node in self.nodes:
            print(int(node),":",nodes[node])

def delnode(self,num):
    del self.nodes[num]
    for edge in self.edges:
        if num in self.edges[edge]:
            self.edges[edge].remove(num)
    del self.edges[num] #Deletes the list associated with the number
    del nodes[int(num)] #Deleted the word associated with the node number
    for dist in list(self.distance.keys()):
        if num in dist:
            del self.distance[dist]

课外活动:

def delnode():
    print("Please specify the city you would like to remove: ")
    GPSMap.indexmap()
    num = input("City Number: ")
    if int(num) >= len(nodes):
        print("Sorry that number does not match")
        delnode()
    GPSMap.delnode(int(num))

我遇到的问题是,在删除了一个“节点”并执行了我为清理其他数据结构而编写的所有代码之后,我收到了

File "C:/Users/gibbo/PycharmProjects/main.py", line 52, in indexmap
print(int(node),":",nodes[node])
IndexError: list index out of range

我做了一些调试,注意到我的索引并没有随着列表的长度而停止,而是在节点被删除后经过,就好像索引没有被更新或我的for循环:

for node in self.nodes:

没有使用列表中的节点数作为索引


Tags: theinselfnodefordefnumint
2条回答
def indexmap(self):
        for node in self.nodes:
#  list elem -^      ^- list
            print(int(node),":",nodes[node])
#                                      ^- It should be int, not elem.

所以,修好它

def indexmap(self):
    for (i,node) in enumerate(self.nodes):
        print("{}:{}".format(i, node))

节点是一个节点,而不是整数。因为你没有包括对象的定义,我们不知道当你把它转换成整数时会发生什么,但是我很肯定你不会喜欢这个结果的。当您使用它作为索引时,结果几乎肯定超出了列表的范围

要查看实际效果,请将打印语句分开:

print(int(node))
print(nodes[node])

总的来说,您应该认识到节点是列表中的节点,而不是它在列表中的位置。直接使用节点作为所需对象

相关问题 更多 >

    热门问题