当我删除数组Python中的值时,我收到错误

时间:2018-05-25 14:08:29

标签: python indexoutofrangeexception

`当我运行以下代码时出现错误:

dosya=open("a.txt","r").read()
dosya=dosya.split(" ")
uzun=len(dosya)
sayac=[0 for i in range(len(dosya))]
for i in range(uzun):
    for j in range(i+1,uzun):
        if(dosya[i]==dosya[j]):
            del dosya[j]
            sayac[i]+=1
    sayac[i]+=1
    del dosya[i]
    i+=1
print sayac

`

  

Erorr:IndexError:列表索引超出范围

为什么?以及如何解决它

2 个答案:

答案 0 :(得分:0)

dosya=open("a.txt","r").read()
dosya=dosya.split(" ")
uzun=len(dosya)
sayac=[0 for i in range(len(dosya))]
for i in range(uzun):
    for j in range(i+1,uzun):
        if(dosya[i]==dosya[j] and dosya[i]!=""):
            #del dosya[j]
            dosya[j] = ""
            sayac[i] += 1
    sayac[i] += 1
    #del dosya[i] since you've already parsed it. No need of deleting it.
    #i+=1   Since i will automatically increment.
print sayac

我认为你的程序是计算每个单词的出现次数。错误的逻辑。

答案 1 :(得分:0)

将来请解释您的代码的意图。如果您提供示例输入以及输出应该是什么,它会有所帮助。正如@ Learner1947指出的那样,你似乎在试图计算每个令牌(即单词)出现的频率。这可以使用collections.Counter类轻松完成。

import collections

dosya = "abc def ghi abc ghi jkl mno def def"
dosya = dosya.split(" ")
counts = collections.Counter(dosya)
print counts
print counts['def']
print counts['abc']

这给我带来了这个结果:

Counter({'def': 3, 'abc': 2, 'ghi': 2, 'jkl': 1, 'mno': 1})
3
2