在Python中实现rfind

时间:2016-10-24 21:49:17

标签: python string methods

我试图在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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

你的功能应该是(当前代码中的变化很小):

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

答案 2 :(得分:0)

所以,在ch中你有字符,而不是字符的索引,所以即使你找到了它,你也会赢得能够知道它的索引(你只知道该字符在你的text字符串中,没有别的)

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

由于return -1(未找到时)在for循环内,因此只要角色不匹配,您就会停止执行(返回-1)查找字符(您应该非常熟悉return语句)

你反转字符串,但这可能不是很好......"建议",因为那样你的索引就会反转。例如,假设您要查找l中的最后一个Hello。你期待的是:

       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