Int对象不可重复

时间:2011-02-23 21:59:55

标签: python dijkstra

我遇到了一个问题,我不知道如何解决涉及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类

中的值

3 个答案:

答案 0 :(得分:2)

试试这个:

for i in nodeTable:

为什么要尝试迭代numNodes?您刚刚将上面的一行定义为表的长度。

但是在循环中追加到同一个表是没有意义的。它不能与读取文件的代码一起使用。 Node类根本不可用......

答案 1 :(得分:0)

如果要迭代元素索引,请使用for i, _ in enumerate(nodeTable)

如果您也想要访问元素本身,请使用实名而不是_

答案 2 :(得分:0)

for i in range(numNodes) ... numNodes只是一个数字,而不是数字数组,这就是你所追求的。