[英]Remove all edges from a graph in networkx
我執行以下python命令,嘗試從圖形G
刪除所有邊。
def method(G):
edges = G.edges()
G.remove_edges_from(edges)
但這會產生以下錯誤:
RuntimeError: dictionary changed size during iteration.
該命令似乎遍歷邊緣,但是當我移除邊緣時,它會在迭代過程中修改迭代器,這會導致錯誤。
我該如何解決?
您可能需要研究方法create_empty_copy
,該方法將不包含邊的節點復制到新圖中。 該文檔的字面意思是:
返回圖G的副本,其中所有邊均已刪除。
如果您想保持原始圖形不變,則可以執行以下操作
edges = list(G.edges)
以確保您在請求移除邊緣之前先將其復制。
networkx
軟件包已經提供了幾種方法:
remove_edges_from
:從圖中刪除所有邊 clear
:從圖中刪除所有節點和邊 為什么干脆不使用它們中的任何一個來滿足您的需求? 例如,
G.remove_edges_from(G.edges())
應該執行此工作,而不是定義另一個函數來執行此操作。 例如,考慮以下代碼在帶有jupyter notebook
Windows 11中的python 3.5
上運行:
import platform
print(platform.python_version())
# 3.5.4
import networkx as nx
print(nx.__version__)
# 1.11
G=nx.complete_graph(5)
print(G.edges())
# [(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
G.remove_edges_from(G.edges())
print(G.edges())
# []
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.