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

时间:2017-04-04 23:54:35

标签: python python-3.x class for-loop indexing

我有一个课程,我将不遗漏任何不重要的信息:

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:

未使用列表中的节点数作为索引。

2 个答案:

答案 0 :(得分:0)

节点节点,而不是整数。由于您还未包含对象的定义,因此我们不知道将其转换为整数时会发生什么,但我很确定您不会喜欢结果。当您将其用作索引时,结果几乎肯定会超出列表范围。

要查看实际效果,请将您的打印声明分开:

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

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

答案 1 :(得分:0)

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