从networkx

时间:2018-09-10 05:23:45

标签: python networkx

我执行以下python命令,尝试从图G上删除所有边。

def method(G):
  edges = G.edges()
  G.remove_edges_from(edges)

但是会产生以下错误:

RuntimeError: dictionary changed size during iteration.

该命令似乎遍历边缘,但是当我移除边缘时,它会在迭代过程中修改迭代器,从而导致错误。

我该如何解决?

2 个答案:

答案 0 :(得分:6)

您可能想研究方法create_empty_copy,该方法将不带边的节点复制到新图形中。该文档的字面意思是:

  

返回图G的副本,其中所有边均已删除。

如果您想保持原始图形不变,可以执行类似的操作

edges = list(G.edges)

以确保在请求将边缘移除之前先将其复制。

答案 1 :(得分:0)

G.edges是一个“ edges视图”,而G.edges()是一个“ edges数据视图”,它们绑定到图形,并在更改图形时进行更新。

您需要将它们转换为自包含的自变量,例如,通过将边视图转换为列表或字典,每次将边从图形中移除时都不会更新。

因此,您可以使用以下解决方法:

G.remove_edges_from(list(G.edges()))
G.remove_edges_from(list(G.edges))
G.remove_edges_from(dict(G.edges))