Перебор двух переменных по одному списку - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь написать программу, которая выполняет итерации i, j и k и находит минимальное значение по определенной формуле (vik + vkj - vij), где v - это 2-й список расстояний между точками, 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 между ними?

1 Ответ

1 голос
/ 25 марта 2020

Я не совсем понимаю описание того, что вы хотите сделать, но я могу решить эту ошибку для вас. Это в строке кода:

for i,j in new:

Вы определили новый как список [2,4]. Поэтому, когда вы делаете для i, j в [2,4], Python автоматически распаковывает список, и теперь у вас есть для i, j в 2,4, что, конечно, не может быть повторено. Запрещено делать что-то вроде:

for i in 2:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...