檢查圖中是否存在自我迴圈(self-loop)
正如 Eric 所說,NetworkX 也允許邊的起點與終點是同一個節點;對社群網路圖而言這可能不直覺,但在像是旅次網路這類資料建模時很有用,因為個體會從一個地點出發,最後回到另一個地點。
在進一步分析前先檢查這件事很實用,而 NetworkX 提供了對應的方法:nx.number_of_selfloops(G)。
在本題與後續練習中,你會發現 assert 敘述很有用。assert 會檢查其後的敘述是否評估為 True,否則就會拋出 AssertionError。
先在 IPython Shell 中呼叫 nx.number_of_selfloops(),並傳入 T,以取得起點與終點相同的邊數。這個圖中已經人工加入了一些自我迴圈。你在本題的工作是撰寫一個函式來回傳這些邊所屬的節點。
本練習屬於課程
Python 網路分析入門
練習說明
- 定義名為
find_selfloop_nodes()的函式,接收一個引數:G。- 使用
for迴圈走訪G中的所有邊(不包含中繼資料)。 - 如果節點
u等於節點v:- 將
u加入清單nodes_in_selfloops。 - 回傳清單
nodes_in_selfloops。
- 將
- 使用
- 檢查圖中的自我迴圈邊數是否等於具有自我迴圈的節點數。這部分已為你完成,按一下「Submit Answer」即可查看結果!
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Define find_selfloop_nodes()
def ____:
"""
Finds all nodes that have self-loops in the graph G.
"""
nodes_in_selfloops = []
# Iterate over all the edges of G
for u, v in ____:
# Check if node u and node v are the same
if ____:
# Append node u to nodes_in_selfloops
____
return nodes_in_selfloops
# Check whether number of self loops equals the number of nodes in self loops
assert nx.number_of_selfloops(T) == len(find_selfloop_nodes(T))