如何迭代和删除networkx有向图中的特定边

时间:2018-01-04 12:00:44

标签: python python-3.x graph networkx

我在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])

如何迭代所有边并反转所有负边?

1 个答案:

答案 0 :(得分:3)

在迭代时更改迭代的元素是邪恶的; o)

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])