【发布时间】:2017-08-30 09:16:37
【问题描述】:
我有一门课,我会省略不重要的信息:
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:
不使用列表中的节点数作为索引。
【问题讨论】:
-
nodes[node]应该是self.nodes[node]在 ~8 行中 -
node已经是一个节点,而不是一个索引;你不需要通过nodes[node]或self.nodes[node]来获取节点。 -
@ryugie 应该澄清这个节点是不同的,它是一个名称列表,我想将节点(数字)映射到节点(名称),所以索引是 1:1
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。您发布的代码缩进不当;即使已解决,也不会重现问题。
标签: python python-3.x class for-loop indexing