我遇到了一个问题,我不知道如何解决涉及Dijkstra的算法 - 这是我的代码:
infinity = 1000000
invalid_node = -1
#startNode = 0
class Node:
distFromSource = infinity
previous = invalid_node
visited = False
def populateNodeTable():
nodeTable = []
f = open("twoDArray.txt", "r")
for line in f.readlines(): #get number of nodes from file
nodeTable.append(line.split(',')) # Create matrix of weights
numNodes = len(nodeTable) # Count nodes
print numNodes
#for all nodes in text file, set visited to false, distFromSource to infinity & predecessor to none
**for i in numNodes:
nodeTable.append(Node(i))**
#nodeTable.append(Node())
nodeTable[startNode].distFromSource = 0
print nodeTable
if __name__ == "__main__":
populateArray()
populateNodeTable()
当我运行此代码时,我收到以下错误:
Traceback (most recent call last):
File "2dArray.py", line 63, in <module>
populateNodeTable()
File "2dArray.py", line 18, in populateNodeTable
for i in numNodes:
TypeError: 'int' object is not iterable
我不确定如何纠正这个错误(星号之间的部分) - 我想要做的是读取我的文本文件,它只是一系列用逗号分隔的整数,并计算其中的节点数那个文本文件 然后将为每个节点分配Node类
中的值答案 0 :(得分:2)
试试这个:
for i in nodeTable:
为什么要尝试迭代numNodes
?您刚刚将上面的一行定义为表的长度。
但是在循环中追加到同一个表是没有意义的。它不能与读取文件的代码一起使用。 Node类根本不可用......
答案 1 :(得分:0)
如果要迭代元素索引,请使用for i, _ in enumerate(nodeTable)
如果您也想要访问元素本身,请使用实名而不是_
答案 2 :(得分:0)
for i in range(numNodes)
... numNodes只是一个数字,而不是数字数组,这就是你所追求的。