专栏首页python320190118-自定义实现replac

20190118-自定义实现replac

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,因此不能用这种写法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python经典面试题

    输入描述: 一行字符串,非空,长度小于5000。 输出描述: 整数N,最后一个单词的长度。

    py3study
  • python学习总结五(python序列

    成员关系符就是判断一个字符是否属于这个字符串,再就是这个字符串是否属于这个元组,或者列表。返回值也是布尔值(True,Flase)。

    py3study
  • Python过滤不可见字符

        for i in range(0,32):         str = str.replace(chr(i),'')

    py3study
  • Sql Server 集合防黑办法

    Sql Server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件查询一个集合基本上多数据查询的必备项目.

    谭广健
  • 不打开Wifi获取Mac地址

    今天遇到一个问题,要求不打开Wifi的前提下获取Mac地址,所以针对Android上Mac地址的获取做了总结。 MAC地址:每个接入网络的设备都有一个专门的序...

    用户7557625
  • Python3 与 C# 基础语法对比(String专栏-新排版)

    在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master

    逸鹏
  • 剑指offer——字符串的排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,ba...

    AI那点小事
  • 拉丁猪文字游戏

    拉丁猪文字游戏——这是一个英语语言游戏。基本规则是将一个英语单词的第一个辅音音素的字母移动到词尾并且加上后缀-ay(譬如“banana”会变成“anana-ba...

    _gongluck
  • VBA替换不确定数量的空白

    工作中碰到过这种情况:有些外部收集来的资料,由于表格制作者不知道如何在单元格中输入换行符,他的做法是设置单元格格式自动换行,为了达到排版换行目的,是输入了一些空...

    xyj
  • extern关键字详解

    extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

    WindSun

扫码关注云+社区

领取腾讯云代金券