1.自定義實現replace方法 Python replace() 方法把字元串中的 old(舊字元串) 替換成 neange(新字元串),如果指定第三個參數max,則替換不超過 max 次。考慮old與nein的長度不一樣的情況,如old = 'is';new = 'was' 思路: 1.先找出字 ...
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,因此不能用這種寫法