Я пытаюсь создать своего рода остаточную сеть из данной сети, для этого я сначала создаю обратные ребра, которые не существуют на графике, но я сохраняю получать сообщениеPython, RuntimeError: измененный размер слова во время итерации
RuntimeError: dictionary changed size during iteration
Сначала я был, очевидно, итерация над объектом, который вносятся изменения в течение цикла:
def Gf(Graph): #residual graph
for u in Graph:
for v in Graph[u]:
if u in Graph[v]:
pass
else:
Graph[v][u]=0 #create the edge with capacity 0
return Graph
Когда граф Graph является объектом вида (я новичок в Python поэтому я не знаю, если это лучший способ сделать это)
defaultdict(lambda: defaultdict(lambda:0))
со значениями График [u] [v] установлен на емкость ребра u, v.
Так что я создал копию графика и попытался перебрать этот объект
def Gf(Graph): #residual graph
Graph_Copy=Graph.copy()
for u in Graph_Copy:
for v in Graph_Copy[u]:
if u in Graph_Copy[v]:
pass
else:
Graph[v][u]=0
return Graph
Но это не сработало. Я пробовал другие способы (создаю глубокую копию, создаю пустой объект Graph_Copy, перебираем Graph и затем устанавливаем соответствующие значения Graph_Copy), но пока не повезло. Что я делаю неправильно?
Переменные 'Gf',' G', 'u',' v' и 'Gr' не имеют описательных имен. Дайте им имена, состоящие из фактических слов. Программа будет работать так же быстро, а гораздо проще отлаживать. – TigerhawkT3
Спасибо за предложение, я изменил код (хотя я думаю, что u, v - довольно простые переменные при работе над графом, а Gf - обычное обозначение для остаточного графика). – Raul
Есть ли причина, почему вы используете словарь словаря вместо 2-мерного массива (т. Е. Списка списка)? Массив будет намного проще перебирать, не говоря уже о стандартной структуре данных для графиков. – oxymor0n