在单个列表上迭代两个变量
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:
我正在尝试编写一个迭代 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: