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