在单个列表上迭代两个变量

Iterating two variables over a single list

我正在尝试编写一个迭代 i、j 和 k 的程序,并在给定特定公式 (vik + vkj - vij) 的情况下找到最小值,其中 v 是点之间距离的二维列表,k 是一个新点二被插入到新数组中,i,j 是新数组中的现有值。 对不起,如果这个解释有点混乱...

我的代码是这样的:

values = [[0,2],[3,3],[4,5],[2,1],[7,1]]
points = [0,1,2,3,4]
new = [2,4]

for k in points: #k is the point that will be inserted
    minVal = 1000000000000000 #set to any arbitrarily high value, that will be larger than any other distance
    for i,j in new: 
        nextVal = values[i][k] + values[k][j] - values[i][j] # finds value which minimises vik + vkj - vij
        if nextVal < minVal:
            minVal = nextVal
            idx = i #saves index of i,j that gave minimal value, so that k can be inserted between these
            jdx = j
    new.insert(idx + 1, k) #insert after idx or before jdx

无论如何我得到的问题是:

for i,j in new: 
TypeError: 'int' object is not iterable

我在某处读到这是因为 int 类型的对象不能被迭代,但我不知道还有什么办法可以解决这个问题。

我如何让两个单独的值遍历一个整数列表,同时确保我记得 i,j 的哪两个值给出了最小值,然后我可以在它们之间添加 k?

我不完全理解你的目的描述,但我可以为你解决这个错误。它在代码行中:

for i,j in new:

您已将新定义为列表 [2,4]。因此,当您执行 for i,j in [2,4] 时,Python 会自动解压缩列表,现在您拥有 for i,j in 2,4,这当然无法迭代。禁止做类似的事情:

for i in 2: