I';我在删除Python数组中的值时出错

I';我在删除Python数组中的值时出错,python,indexoutofrangeexception,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]+

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

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:索引器:列表索引超出范围

为什么??我该怎么修呢

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

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

以后请解释代码的意图。如果您提供一个示例输入和应该输出的内容,这会有所帮助。正如@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

dosya
中删除元素时,元素会变小,因此较大的索引不再有效。是。我如何从列表的末尾向下循环,使您删除的项目不会更改您尚未检查的列表部分。我对编码是新手。谢谢你,我印象深刻