#习题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
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

posted on 2019-05-05 23:03  腿短毛不多  阅读(109)  评论(0编辑  收藏  举报