2014-09-09 2 views
-1

Мои цели состоят в том, чтобы иметь список списков, в которых каждый элемент во внешнем списке содержит слово в его первом индексе и количество раз, когда оно встретило его во втором индекс. В качестве примера, он должен выглядеть следующим образом:Ошибка Python «индекс индекса вне диапазона»

[["test1",0],["test2",4],["test3",8]] 

Единственная проблема в том, что, когда я пытаюсь, например, доступ к слову «test1» с первым внутрипартийным списка, я получаю индекс вне диапазона ошибка. Вот мой код, как я пытаюсь сделать это:

stemmedList = [[]] 

f = open(a_document_name, 'r') 

#read each line of file 
fileLines = f.readlines() 
for fileLine in fileLines: 
    #here we end up with stopList, a list of words 
    thisReview = Hw1.read_line(fileLine)['text'] 
    tokenList = Hw1.tokenize(thisReview) 
    stopList = Hw1.stopword(tokenList) 

    #for each word in stoplist, compare to all terms in return list to 
    #see if it exists, if it does add one to its second parameter, else 
    #add it to the list as ["word", 0] 
    for word in stopList: 
     #if list not empty 
     if not len(unStemmedList) == 1: #for some reason I have to do this to see if list is empty, I'm assuming when it's empty it returns a length of 1 since I'm initializing it as a list of lists?? 
      print "List not empty." 
      for innerList in unStemmedList: 
       if innerList[0] == word: 
        print "Adding 1 to [" + word + ", " + str(innerList[1]) + "]" 
        innerList[1] = (innerList[1] + 1) 
       else: 
        print "Adding [" + word + ", 0]" 
        unStemmedList.append([word, 0]) 
     else: 
      print "List empty." 
      unStemmedList.append([word, 0]) 
      print unStemmedList[len(unStemmedList)-1] 

return stemmedList 

Конечный результат заканчивает тем, что:

Список пуст. [ "test1", 0] Список не пуст»

Краш с индексом список из ошибок диапазона, который указывает на линию if innerList[0] == word

+1

Почему бы не использовать 'Counter'? Это именно то, для чего это нужно. – cmd

+0

Ваш 'else: print 'Список пуст.' 'Statement находится внутри цикла. Вы имели в виду эту линию? – Celeo

ответ

0

Вы a = [[]]

Теперь, когда вы добавления в этот список после встречи первого слова, то есть

a = [ [], ['test', 0] ]

В следующей итерации вы обращаетесь, 0-й элемент пустой список которого не существует.

0

Если предположить, что stemmedList и unStemmedList подобны

stemmedList = [[]] 

у вас есть пустой список в списке списков, он не имеет [0]. Вместо этого просто инициализируйте его:

stemmedList = [] 
0

Разве это не проще?

counts = dict() 
def plus1(key): 
    if key in counts: 
     counts[key] += 1 
    else: 
     counts[key] = 1 

stoplist = "t1 t2 t1 t3 t1 t1 t2".split() 
for word in stoplist: 
    plus1(word) 

counts 
{'t2': 2, 't3': 1, 't1': 4} 
Смежные вопросы