首页 > 解决方案 > 如何摆脱“IndexError:字符串索引超出范围”

问题描述

我正在尝试在图形网络中查找邻居节点。我已经在 coa_train 中导入了数据,现在正在尝试查找邻居节点。


import matplotlib.pyplot as plt
from math import isclose
from sklearn.decomposition import PCA
import os
import networkx as nx
import numpy as np
import pandas as pd
#from stellargraph import StellarGraph, datasets
#from stellargraph.data import EdgeSplitter
from collections import Counter
import multiprocessing
#from IPython.display import display, HTML
from sklearn.model_selection import train_test_split

%matplotlib inline

def readTrainingData(tr):
    trainingData = []
    with open(tr) as f:
        for line in f:
            a1, a2 = line.strip().split()
            trainingData.append((a1, a2))
    return trainingData
coa_train = readTrainingData("training.txt")

coa_train

[('8193', '16056'),
 ('24578', '21968'),
 ('24578', '18297'),
 ('24578', '16770'),
 ('24578', '17038'),
 ('8195', '2072'),
 ('8195', '20568'),

----------------------
import collections

def getNeighbors(data):
    
    neighbors=collections.defaultdict(set)
    
    for pair in data:
        
        neighbors[pair[0]].add(pair[1])
        
        neighbors[pair[1]].add(pair[0])
        
        

        return neighbors

coa_neighbors= getNeighbors("coa_train")
  

在这里,我收到如下错误:

IndexError                                Traceback (most recent call last)
<ipython-input-41-c775c56181f7> in <module>
     13         return neighbors
     14 
---> 15 coa_neighbors= getNeighbors("coa_train")
     16 

<ipython-input-41-c775c56181f7> in getNeighbors(data)
      5     for pair in data:
      6 
----> 7         neighbors[pair[0]].add(pair[1])
      8 
      9         neighbors[pair[1]].add(pair[0])

IndexError: string index out of range

我看不出这个错误的任何原因,因为我相信 coa_train 数据中的 0 和 1 索引是有效的。

标签: pythonindex-error

解决方案


您将字符串传递给函数

getNeighbors("coa_train")

但它应该是变量

getNeighbors(coa_train)

使用字符串作为参数,循环

for pair in data:

会给你单个字符。而只有一个角色,你就不能再做pair[1]任何事情了。


推荐阅读