我执行以下python命令,尝试从图G
上删除所有边。
def method(G):
edges = G.edges()
G.remove_edges_from(edges)
但是会产生以下错误:
RuntimeError: dictionary changed size during iteration.
该命令似乎遍历边缘,但是当我移除边缘时,它会在迭代过程中修改迭代器,从而导致错误。
我该如何解决?
答案 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))