【问题标题】:2D-Array Indexing in pythonpython中的二维数组索引
【发布时间】:2014-11-11 13:44:43
【问题描述】:

我想计算一个数组的每个单词在文本文件中出现的次数。如果在 shell 中编写打印语句,我会得到输出。但不是当我将它作为文件运行时。我收到此错误“IndexError: list index out of range”。我是 python 初学者,请帮帮我。

from collections import Counter
from array import *
import string
cnt=Counter()
file = open('output.txt', 'r')
word =[ ]
c=[ ]
count =0
first_word =[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
word_count = [ ]
new_array =['CC','CD','DT','EX','FW','IN','JJ','JJR','JJS','LS','MD','NN','NNS','NNP','NNPS','PDT',
                       'POS','PRP','PRP$','RB','RBR','RBS','RP','SYM','TO','UH','VB','VBD','VBZ','WDT','WP$','WP','WRB']
for line in file:
      words = line.split()
      word.append(words)
for i in range(0,30):
      for j in range(0,33):
            if(new_array[j] in word[i][0]):
                  first_word[j]+=1
            else:
                  continue
print first_word

【问题讨论】:

  • 显示您的output.txt

标签: python arrays string for-loop indexing


【解决方案1】:

当您不想迭代 lists 时,不要对 range 使用 显式值,而是使用您正在迭代的 列表长度。这样就不会出现索引错误。所以,替换:

for i in range(0,30):
      for j in range(0,33):

与:

for i in range(len(word)):
      for j in range(len(first_word)):

我想它会解决这个问题。此外,当您必须初始化具有类似值的列表时,例如:

first_word =[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

在python中有一个简单的方法:

>>> first_word = [0]*33
>>> first_word 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

【讨论】:

  • 我明确设定了范围,但仍然显示相同的错误
【解决方案2】:

我认为以下代码应该可以为您提供所需的结果:

wordsFromFile = []    
f = open("output.txt", 'r')
for each_line in f:
    wordsFromFile.extend(each_line.strip().split(" "))
f.close()

print wordsFromFile

new_array = ['CC','CD','DT','EX','FW','IN','JJ','JJR','JJS','LS','MD','NN','NNS','NNP','NNPS','PDT',
                       'POS','PRP','PRP$','RB','RBR','RBS','RP','SYM','TO','UH','VB','VBD','VBZ','WDT','WP$','WP','WRB']
first_word = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

for eachWordFromFile in wordsFromFile:
    if eachWordFromFile in new_array: 
        first_word[new_array.index(eachWordFromFile)] += 1

#output results: 
for i in range(0,33):
    print str(new_array[i]) + ": " + str(first_word[i])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2015-08-29
    • 2023-03-07
    • 2020-07-30
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多