檢視與走訪
NetworkX 提供四個持續更新的視圖(view):G.nodes、G.edges、G.adj、G.degree。它們像集合也像字典,改圖之後不必重新查詢,視圖會跟著變。
四個基本視圖
import networkx as nx
G = nx.Graph([(1, 2), (1, 3), (3, "m")])
G.add_node("spam")
list(G.nodes)
list(G.edges)
list(G.adj[1]) # 等同 list(G.neighbors(1))
G.degree[1] # 連到 1 的邊數
只要一個節點或一組節點的邊/度:
屬性寫入 vs 讀出
屬性寫入用下標最順手;一次列出資料用可呼叫形式:
G.nodes["spam"]["color"] = "blue"
G.edges[1, 2]["weight"] = 10
list(G.edges(data=True))
list(G.nodes(data="color"))
有向圖的後繼與前驅
DG = nx.DiGraph()
DG.add_edges_from([(2, 1), (1, 3), (2, 4), (1, 2)])
list(DG.successors(2)) # 2 指出去的節點
list(DG.predecessors(1)) # 指進 1 的節點
DG.out_degree[2]
DG.in_degree[1]
list(DG.edges) 的順序取決於加入邊的順序與鄰接結構,不要假設它按數字排序。
走訪整張圖
無向圖每條邊會從兩端各走一次。若要每條邊只處理一次,改走 G.edges(data=True)。