【问题标题】:Appending Vowel Location Python附加元音位置 Python
【发布时间】:2016-07-21 15:38:28
【问题描述】:

我试图弄清楚为什么在运行此代码时会得到一个空列表。目标是获取一个字符串,找到任何元音的索引并将该索引附加到列表中。索引从一开始而不是零。任何可能发生错误的提示都会很棒!如果您注意到一般疏忽,请告诉我。相对较新的python。谢谢

def vowel_indices(word):
    vowels = ["a", "e", "i", "o", "u"]
    vowel_idx = []
    word.lower() 
    for idx, letter in enumerate(word, start = 1):
        if letter == vowels:
            vowel_idx.append(idx) 
        return vowel_idx     

【问题讨论】:

    标签: python indices enumerate


    【解决方案1】:

    if letter == vowels: 应该是if letter in vowels:

    元音是一个列表,一个字符串永远不能等于一个列表,您还应该将返回移出循环,因为这将在函数第一次循环时停止它的跟踪

    【讨论】:

      【解决方案2】:

      效果很好

      def vowel_indices(word):
          vowels = ["a", "e", "i", "o", "u"]
          word.lower()
          indexes = [index for c,index in zip(word,range(len(word))) if c in vowels]
          print(indexes)
      

      【讨论】:

      【解决方案3】:

      方法lower不会修改字符串就地(字符串是不可变的),所以你应该改为:

      word = word.lower()
      

      然后要检查vowels 列表中某个字符的成员资格,您应该使用in 运算符而不是==

      if letter in vowels:
      

      然后return 语句不应放在for 循环内,因为这会使函数在第一次迭代后立即返回,这不是您想要的:

      for idx, letter in enumerate(word, start = 1):
          if letter in vowels:
              vowel_idx.append(idx) 
      return vowel_idx 
      

      另外,您可以不那么冗长,并使用列表推导式来完成整个操作:

      def vowel_indices(word):
          return [idx for idx, l in enumerate(word.lower(), 1) if l in vowels]
      

      【讨论】:

      • return 语句也不合适。
      • @Alex 是的,那也是
      • 谢谢你为我澄清了很多!
      猜你喜欢
      • 1970-01-01
      • 2022-12-18
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多