我有一个课程,我将不遗漏任何不重要的信息:
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:
未使用列表中的节点数作为索引。
答案 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))