Python错误-列表索引超出范围。其他修复似乎无效

时间:2018-08-30 01:57:46

标签: python python-2.7

我有一个用于检查字符串中有多少个元音的函数,但是每当我运行它时,都会出现list index out of range错误。我环顾四周,发现通常的解决方法是执行range(len()),但是我已经在这样做了。我该怎么办?

def count_vowels(message):
  new_message = message.lower()
  vowels = ['a', 'e', 'i', 'o', 'u']
  x = 1
  for char in range(len(new_message)):
    output = new_message.count(vowels[x])
    x += 1    
  return output

1 个答案:

答案 0 :(得分:1)

修复了我在评论中提到的一堆错误之后,您的代码可能如下所示:

def count_vowels(message):
  message = message.lower()
  vowels = 'aeiou'
  output = 0
  for char in vowels:
    output += message.count(char)
  return output

但是,您通过为每个元音调用count来遍历字符串5次。取而代之的是,您可以遍历消息一次并记录所有的元音:

def count_vowels(message):
  message = message.lower()
  vowels = {'a','e','i','o','u'}
  output = 0
  for char in message:
    if char in vowels:
      output += 1
  return output

通过使用生成器表达式和库函数sum,可以使后者更紧凑,因为对于元音和char in vowelsTrueFalse(1)({0 ):

def count_vowels(message):
  vowels = {'a','e','i','o','u'}
  return sum((char in vowels) for char in message.lower())