2012-03-23 259 views
1

我是新的python,我试图用find来实现rfind函数。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的建议应该是有帮助的。

+1

你可以尝试'reverse()'函数。 – kev 2012-03-23 19:57:46

回答

1

我觉得你的算法应该是这样实现:

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

另一种算法,这可能更快与t许多ocurrences字符串: (编辑:做它适用于具有多个字符的字符串)

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

谢谢。你的实现看起来不错。 – mousey 2012-03-23 21:59:28

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