direc = "emails/"
files = os.listdir(direc)
emails = [direc + email for email in files]
words = []
c = len (emails)
for email in emails:
f = open(email)
blob = f.read()
words += blob.split( )
print c
c-=1
for i in range(len(words)):
words [i] = words[i].lower()
dictionary = Counter(words)
print dictionary.most_common(5000)
如果电子邮件简短,则此代码可以正常工作,当电子邮件超过10个单词时,出现错误:行内单词[i] = words [i] .lower()
中的“列表索引超出范围”答案 0 :(得分:0)
此
for i in range(len(words)):
words [i] = words[i].lower()
可以改写为
words = map(str.lower, words)
通过索引for i in range(len(x))
遍历列表几乎总是一种代码嗅觉,如果您需要索引,则应使用enumerate
答案 1 :(得分:0)
这是问题
len(emails)
因为您在请求长度时没有将电子邮件解析为单词。如果设置战利品来定义每封电子邮件的单词数,然后使用它代替len(电子邮件),则会对您进行排序。