2012-03-23 273 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