20190118-自定義實現replace方法

何發奮發表於2019-01-18

1.自定義實現replace方法

Python replace() 方法把字串中的 old(舊字串) 替換成 neange(新字串),如果指定第三個引數max,則替換不超過 max 次。
考慮old與nein的長度不一樣的情況,如old = `is`;new = `was`

思路:

1.先找出字串中old字元的index,考慮可能出現多次的情況使用一個列表replace_str_index_in_s儲存old_str的index

2.使用result列表儲存替換後的新的字串,考慮result的生成方式為:

  2.1 從原有字串的第0位開始,如果index不在replace_str_index_in_s中,則result+=s[i],然後檢視i+1,i+2…

  2.2 如果index在replace_str_index_in_s中,則result+=new_str,此時需要注意的一點是新的i的位置位i+len(old_str)而非i+1

  2.3 考慮不知下一個i的值為i+1還是i+len(old_str),因此用while語句來實現

3. 考慮給定max的情況使用count來計數,當count<max的時候替換,當count>max的時候不替換

def customize_replace(s,old_str,new_str,max=None):
    result =``
    #儲存新的字串
    replace_str_index_in_s =[]
    #儲存old_str的index
    for i in range(len(s)):
        if s[i:i+len(old_str)]==old_str:
            replace_str_index_in_s.append(i)
    j=0
    if max==None:
        while j <len(s):
            #遍歷s[j],j的值不是按序+1,因此用while迴圈
            if j in replace_str_index_in_s:
                result+=new_str
                j+=len(old_str)
            else:
                result+=s[j]
                j+=1
    else:
        count =0
        #統計替換次數
        while j <len(s):
            if count <max and j in replace_str_index_in_s:
                print(`if執行`,j,result)
                result+=new_str
                j+=len(old_str)
                count+=1
            else:
                print(`else執行`,j,result)
                result+=s[j]
                j+=1
    return result

Tips:有一種特殊情況如s2=`addbbdddbbbddbb##bb#`有3個b的情況下替換的old_str為bb的時候,因此replace_str_index_in_s裡面的index可能結果為[3,8,9,13,17],但是明顯第9位不會進行替換,因為此處需要用count來計數而不能寫做replace_str_index_in_s[:max],這種寫法的情況下會有替換次數不足max的情況,錯誤情況如max =3,那麼replace_str_index_in_s[:3] = [3,8,9],但是第9位不會替換,因此實際替換次數為2,因此不能用這種寫法

 

相關文章