2014-08-28 4 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

답변

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

을 당신은 (EX_GRAPH1가 전달되는)가 희소 배열 2 차원 배열의되지 j X i 항목 이상하지만 digraph를 반복하고 있습니다.

일부 항목의 길이는 0, 1, 2, 3입니다.

dict을 사용하지 마십시오. numpy 및/또는 networkx을 고려하십시오.