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