1. 程式人生 > >20190118-自定義實現replace方法

20190118-自定義實現replace方法

bbb 執行 for 方式 none 一個 style pri tips

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,因此不能用這種寫法

20190118-自定義實現replace方法