强调社交网络的中心地位

时间:2017-05-20 16:48:11

标签: networkx python-3.6

我收到了这段代码的错误: path [index] [4] + = 1 IndexError:列表索引超出范围 为什么会这样?我怎么能删除这个错误? 代码:

def stress_centrality(g):
  stress = defaultdict(int)
  for a in nx.nodes_iter(g):
    for b in nx.nodes_iter(g):
      if a==b:
        continue
      pred = nx.predecessor(G,b)  # for unweighted graphs
      #pred, distance = nx.dijkstra_predecessor_and_distance(g,b)  # for weighted graphs
      if a not in pred:
        return [] 
      path = [[a,0]] 
      path_length = 1
      index = 0
      while index >= 0: 
        n,i = path[index] 
        if n == b: 
          for vertex in list(map(lambda x:x[0], path[:index+1]))[1:-1]:
            stress[vertex] += 1
        if len(pred[n]) >i: 
          index += 1 
          if index == path_length: 
            path.append([pred[n][i],0]) 
            path_length += 1 
          else: 
            path[index] = [pred[n][i],0] 
        else: 
          index -= 1 
          if index >= 0: 
            path[index][4] += 1 
  return stress

1 个答案:

答案 0 :(得分:0)

如果没有数据,除了指示性答案之外,很难给出任何其他信息。

这一行

path[index][4] += 1

假设path[index]中有5个元素,但少于此。在我看来,您的代码仅分配或附加到长度为2的path列表中。如

path = [[a,0]]
path.append([pred[n][i],0]) 
path[index] = [pred[n][i],0] 

因此很难看出如何访问其中一个列表的第5个元素是正确的。

这是一个完整的猜测,但我认为你可能意味着

path[index][1] += 4