使用find实现rfind

时间:2012-03-23 19:43:19

标签: python

我是python的新手,我正在尝试使用find实现rfind函数。

def rfind_imp(s,t):
    ss = s
    fpos = 0
    while(True):             
         fpos = s.find(t,fpos)
         ss=ss[fpos:]

         if(ss):    
           fpos = fpos +1    
         else:
           return fpos

print rfind_imp("I saw a donkey,I saw a saw "," ")
print "I saw a donkey,I saw a saw ".rfind(" ")

但我面临的问题是我获得第16个字符作为rfind值。有人可以帮我找到我在做错的地方。另外,使用find更好地实现rfind的任何建议都应该有所帮助。

2 个答案:

答案 0 :(得分:1)

我认为您的算法应该像这样实现:

def rfind_imp(s, t):
    fpos = -1
    while True:
         pos = s.find(t, fpos + 1)
         if pos == -1:
            return fpos
         fpos = pos

对于t多次发生的字符串,另一种算法可能更快: (编辑:使其适用于具有多个字符的字符串)

def rfind2(s, t):
    pos = s[::-1].find(t[::-1])
    if pos == -1:
        return pos
    return len(s) - pos - len(t)

答案 1 :(得分:0)

可能是这样的:

def rfind_imp(s, t):
    fpos = 0
    while(True):
        fpos = s.find(t, fpos)
        if fpos == -1:
            return pfpos
        else:
            pfpos = fpos
            fpos += 1