整数对象不可迭代

0 投票
3 回答
5874 浏览
提问于 2025-04-16 12:25

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

如果你想要遍历元素的索引,可以使用 for i, _ in enumerate(nodeTable) 这个写法。

如果你还想访问到元素本身,就把 _ 替换成一个真实的名字,而不是用下划线。

0

你可以试试 for i in range(numNodes) 这个写法……这里的 numNodes 只是一个数字,而不是你想要的数字数组。

2

试试这个:

for i in nodeTable:

你为什么要对 numNodes 进行循环呢?你在上面一行已经定义了它是表的长度。

但是在循环中往同一个表里添加东西是没有意义的。而且这和读取文件的代码也不兼容。此外,Node类根本无法使用……

撰写回答