【问题标题】:implement rfind in Python在 Python 中实现 rfind
【发布时间】:2016-10-24 21:49:16
【问题描述】:

我正在尝试在 Python 中实现 rfind 函数,而不使用内置的 rfind 方法。它应该像下面这样工作: 与原始方法不同,它接受一个输入字符串和一个字符作为参数,并返回找到该字符的右侧的第一个索引。现在我被困在下一步该怎么做..

# main function
inputString = input("Enter here: ")
inputChar = input("Which character would you like to find?")
print(Myrfind(inputString, inputChar))

def Myrfind(text,aChar):
    reverseString = text[::-1]
    for ch in reverseString:
        if ch == aChar:
            print()
        else:
            return -1

【问题讨论】:

  • 你为什么用print()而不是return
  • @furas 他想看看变量的值,也许吧?然而,可能有return 缺少打印功能之后。

标签: python string methods


【解决方案1】:

恕我直言,最简单的方法是向后迭代字符串并比较每个字符:

def myrfind(text, aChar):
    for i in range(len(text) - 1, -1, -1):
        if text[i]  == aChar:
            return i
    return -1

【讨论】:

    【解决方案2】:

    你的函数应该是这样的(对当前代码的改动很小):

    def Myrfind(text,aChar):
        reverseString = text[::-1]
        for i, c in enumerate(reverseString):  # enumerate() to iterate along with index
            if c == aChar:
                return len(text) - i - 1  # Return len(char) - i -1 since reverse string
        else:          # Return -1 if function is not
            return -1  # exited by for loop
    

    示例运行:

    >>> Myrfind('Hello', 'o')
    4
    >>> Myrfind('Hello', 'l')
    3
    >>> Myrfind('Hello', 'e')
    1
    >>> Myrfind('Hello', 'a')  # 'a' not in string
    -1
    

    【讨论】:

      【解决方案3】:

      所以,在ch 中,你有字符,而不是字符的索引,所以即使你找到它,你也无法知道它的索引(您只知道该字符在您的text 字符串中,仅此而已)

      此外,当您发现巧合时,您打印...什么都没有(print()

      由于return -1(未找到时)在for 循环内,一旦字符与查找的字符不匹配(您应该是非常熟悉return语句)

      您反转字符串,但这可能不是很...“可取的”,因为那样您的索引就会反转。例如,假设您想在Hello 中找到最后一个l。你期待:

             H e l l o
      Index  0 1 2 3 4
      

      那应该是3,但是因为你把它倒过来,从左到右开始走,你会得到:

             o l l e H
      Index  0 1 2 3 4
      

      第一个匹配在1,现在...您仍然可以这样做...您可以将该索引减去总长度,您应该得到它。

      首先,我建议您阅读 enumerate 内置函数的作用(不仅可以获取字符,还可以获取索引)

      与你所拥有的非常接近:

      inputString = input("Enter here: ")
      inputChar = input("Which character would you like to find?")
      
      
      def Myrfind(text,aChar):
          reverseString = text[::-1]
          for i, ch in enumerate(reverseString):
              if ch == aChar:
                  return len(text) - 1 - i
          return -1
      
      
      print(Myrfind(inputString, inputChar))
      

      或者,不是反转数组,而是从右边开始读取(看看range 做了什么)

      def Myrfind(text,aChar):
          for i in range(len(text) - 1, -1, -1):
              ch = text[i]
              if ch == aChar:
                  return i
          return -1
      

      【讨论】:

        猜你喜欢
        • 2021-01-12
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 2022-01-10
        • 2016-01-01
        • 2011-07-03
        • 2017-11-08
        相关资源
        最近更新 更多