Как перебирать и удалять определенные ребра в сетевом ориентированном графе

У меня есть график с положительными и отрицательными ребрами в networkx. Я хочу найти все отрицательные ребра и обратить их. Я написал программу ниже, чтобы найти и удалить отрицательные ребра, но я получаю ошибку итерации. Вот код:

for edge in G.edges():
    sign = G.get_edge_data(edge[0], edge[1])['sign']
    if sign == -1:
       G.remove_edge(edge[0], edge[1])
       G.add_edge(edge[1], edge[0])

Как я могу перебрать все ребра и обратить все отрицательные ребра?


person Lee Yaan    schedule 04.01.2018    source источник


Ответы (1)


Изменение элементов итерации во время итерации — это зло ;о)

thingsToChange = []
for edge in G.edges():
    sign = G.get_edge_data(edge[0], edge[1])['sign']
    if sign == -1:
       thingsToChange.append(edge)

Менять их потом нормально:

for things in thingsToChange:
    G.remove_edge(edge[0], edge[1])
    G.add_edge(edge[1], edge[0])
person Patrick Artner    schedule 04.01.2018