我有一個 id 的 python 字典。每個 id 都有一組它參考的其他 id。如何在字典中找到回圈參考?
我的字典的一個例子是:
{1: [3], 2: [1], 3: [2, 4], 4: [2, 3]}.
每個 id 鍵的值是它參考的其他 id 的串列,它們不能參考自己。
因此,如果有回圈參考,輸出將是:
{3, 4 , 3}.
我正在努力弄清楚如何解決這個問題,因為這似乎是一個常見問題!非常感謝任何幫助的人。
uj5u.com熱心網友回復:
該networkx庫可以在您的圖表中找到回圈。您將需要實體化一個有向圖,因為 ID 之間的鏈接是單向的。您的圖表中有多個周期。例如,3 到 4,4 到 3。這也被認為是一個回圈。
import networkx as nx
data = {1: [3], 2: [1], 3: [2, 4], 4: [2, 3]}
graph = nx.DiGraph(data)
list(nx.simple_cycles(graph))
# returns:
[[1, 3, 4, 2], [1, 3, 2], [3, 4]]
uj5u.com熱心網友回復:
如果您正在尋找長度僅為 2 的回圈參考,即僅用于對 (i,j) 以使 i 參考 j 和 j 參考 i,則以下代碼有效:
d = {1: [3], 2: [1], 3: [2, 4], 4: [2, 3]}
for i in d:
for j in d[i]:
if i in d[j]:
print("Cycle found: ", i, j)
輸出:
Cycle found: 3 4
Cycle found: 4 3
上面的程式做了以下事情:對于字典中的每個鍵 i,如果 i 參考了 j,則檢查 j 是否也參考了 i(即 i 是否也在 d[j] 中),如果是,則列印 i 和 j。僅當 i < j 時,您才可以擴充程式以存盤(或列印) (i,j),以免每個回圈列印兩次。
如果您還想列印更大長度的回圈參考(例如當 i 參考 j、j 參考 k 和 k 參考 i 時),那么您可以使用邊集 {(i,j): i references j} 構造有向圖,并運行一種演算法(例如約翰遜演算法)來查找有向圖中的所有基本回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465125.html
上一篇:如何使用字典將數字代碼翻譯成單詞
下一篇:如果條件為真,則推入陣列
