`当我运行以下代码时出现错误:
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:列表索引超出范围
答案 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