索引错误:列表索引超出“ for i in range(len(x)):”中的范围

时间:2019-09-07 23:13:22

标签: python list

    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()

中的“列表索引超出范围”

2 个答案:

答案 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(电子邮件),则会对您进行排序。