#习题12:自定义实现rfind
Python rfind() 返回字符串最后一次出现的位置,如果没有匹配项则返回-1。
rfind()方法语法:
str.rfind(str, beg=0 end=len(string))
- str -- 查找的字符串
- beg -- 开始查找的位置,默认为0
- end -- 结束查找位置,默认为字符串的长度。
返回字符串最后一次出现的位置,如果没有匹配项则返回-1。
def rfind(s,target_str,beg=None,end=None):
if beg ==None:
beg =0
if end ==None:
end =len(s)-1
target_str_length =len(target_str)
for i in range(len(s)-1,-1,-1):
if i>=beg and i<=end:
if (s[i:i+target_str_length]==target_str) :
return i
return -1
if beg ==None:
beg =0
if end ==None:
end =len(s)-1
target_str_length =len(target_str)
for i in range(len(s)-1,-1,-1):
if i>=beg and i<=end:
if (s[i:i+target_str_length]==target_str) :
return i
return -1
print(rfind("abcdjabw","abw"))
def rfind_self_design(s,s_searched): if not isinstance(s,str) or not isinstance(s_searched,str): return 'input error' elif len(s_searched) > len(s): return -1 elif len(s_searched) == len(s): if s_searched == s: return 0#原字符串和查找字符串长度相等的话直接返回坐标位置0 else: for i in range(len(s)-len(s_searched),-1,-1):#倒叙按坐标取 if s[i:i+len(s_searched)] == s_searched: return i else: return -1 print(rfind_self_design("ab cdjabe","e"))
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\5\0505.py
5
Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
replace()方法语法:
str.replace(old, new[, max])
- old -- 将被替换的子字符串。
- new -- 新字符串,用于替换old子字符串。
- max -- 可选字符串, 替换不超过 max 次
返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
#算法:先找出old在s中出现的索引存到列表中,遍历列表,判断替换次数和第几次替换,注意第n次替换后索引位置的变化,最后再转回str
def replace(s,old,new,times=None): old_length =len(old) old_index_list =[] s_list =list(s) old_sub_new_length =len(old) - len(new) #n为第几次替换 n =1 #如果不传times,替换次数则为原字符串的个数 if times ==None: times =s.count(old) #找出原字符串中需要替换的子自创的索引存入一个列表 for i in range(len(s)): if s[i:i+old_length] ==old: old_index_list.append(i) print(old_index_list) #遍历索引列表 for index in old_index_list: if times >=1: if n ==1: #如果是第一次替换,替换列表对应的索引位置的子字符串 s_list[index:index + old_length] =new n +=1 else: print("n",n) #如果不是第一次替换,每次替换后index应该更新为index-长度查*(n-1) index =index -old_sub_new_length *(n-1) s_list[index:index + old_length] =new n +=1 #每次循环后times要减一 times -=1 return "".join(s_list) print(replace("ab1ab2ab3ab4", "ab", "xyz")) print(replace("ab1ab2ab3ab4", "ab", "xyz",2))
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\5\0505.py
[0, 3, 6, 9]
n 2
n 3
n 4
xyz1xyz2xyz3xyz4
[0, 3, 6, 9]
n 2
xyz1xyz2ab3ab4