節點與邊
圖是長出來的:先建空圖,再加節點與邊;或直接把邊串列丟進建構函式。加邊時,若端點還不存在,NetworkX 會自動建立那些節點。
新增節點
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_nodes_from([2, 3])
G.add_nodes_from([(4, {"color": "red"}), (5, {"color": "green"})])
節點可以是任何可雜湊(hashable)物件:整數、字串、元組、甚至函式物件。不能用 None。
可變物件當節點
list、dict 不可雜湊,不能當節點。若節點內容會變,且雜湊依賴內容,事後改它會讓圖壞掉。不確定時,用整數或字串當 ID,真正的資料放在節點屬性裡。
新增邊
G.add_edge(1, 2)
G.add_edge(2, 3, weight=0.9)
G.add_edges_from([(1, 3), (1, 4)])
G.add_edges_from([(5, 6, {"weight": 3.14})])
邊是 2-tuple (u, v),或 3-tuple (u, v, attr_dict)。重複加入已存在的邊不會報錯;在 Graph 裡通常只是更新屬性。
計數與清空
刪除
刪節點時,連到它的邊會一起消失:
刪不存在的節點或邊會丟例外。若不確定有沒有,先檢查,或用 G.has_node() / G.has_edge()。
常見陷阱:字串當 iterable
add_nodes_from 會走訪容器。字串是字元序列,所以會被拆開。要加多個字串節點,請傳 list:["spam", "eggs"]。