2014-08-28 60 views
-2
EX_GRAPH1 = {0:[1,4,5], 
     1:[2,6], 
     2:[3], 
     3:[0], 
     4:[1], 
     5:[2], 
     6:[] 
     } 

該函數採用一個有向圖有向圖 (表示爲字典),並計算 中度在圖中的節點。IndexError:列表索引超出範圍(它必須是字典,而不是列表)

def compute_in_degrees(digraph): 
in_degrees = {} 
i = 0 
j = 0 
matches = [] 
while i < len(digraph): 
    m = 0 
    while j < len(digraph): 
     if digraph[i][j] == i: <--- HERE IndexError: list index out of range 
      j += 1 
      m += 1 
      matches.append(m) 
     else: 
      j += 1 
    in_degrees[i] = matches 
    i += 1 
return in_degrees 
print compute_in_degrees(EX_GRAPH1) 

幫助,請

+1

這應該是'while j jonrsharpe 2014-08-28 14:54:23

回答

0

嘗試:

while j < len(digraph[i]): 

目前,你只是在重複循環的i,所以你可能會超支。或者,如@jonrsharpe在評論中說,使用for循環:

def compute_in_degrees(digraph): 
    in_degrees = {} 
    i = 0 
    j = 0 
    matches = [] 
    for i, sublist in enumerate(digraph): 
     m = 0 
     for j in sublist: 
      if j == i: 
       m += 1 
       matches.append(m) 
     in_degrees[i] = matches 
    return in_degrees 
print compute_in_degrees(EX_GRAPH1) 
0

你迭代i X j項,但digraphEX_GRAPH1傳遞中)是不是一個二維數組,它是一個稀疏數組。

部分條目爲0,1,2,3條目。

請勿使用dict。考慮numpy和/或networkx

相關問題