【问题标题】:Python replace functionPython替换功能
【发布时间】:2012-02-08 05:44:11
【问题描述】:

我想使用替换功能,但我只想替换一个字符,而不是该字符的所有实例。

例如:-

>>> test = "10010"
>>> test = test.replace(test[2],"1")
>>> print test
>>> '11111' #The desired output is '10110'

有没有办法可以做到这一点?

【问题讨论】:

    标签: python string replace


    【解决方案1】:

    没有。 str.replace() 替换该字符的 所有 个实例。请改用bytearray

    >>> test = bytearray('10010')
    >>> test[2] = '1'
    >>> str(test)
    '10110'
    

    【讨论】:

    • str.replace 还可以替换任意数量的子字符串,如果给出了可选参数 'maxreplace'。
    • @ktodisco:当然可以,但这在这里无济于事,因为它总是从被替换的字符串实例的开头开始计算,并且必须更改第二个实例。
    • @ktodisco,我最初也是这么想的,然后我重新阅读了这个问题并删除了我的答案:)
    【解决方案2】:

    没有内置解决方案。但这里有一个简单的函数:

    >>> def replace_one_char(s, i, c):
    ...     return s[:i] + c + s[i + 1:]
    ... 
    >>> replace_one_char('foo', 1, 'a')
    'fao'
    

    还可以考虑 Ignacio 的 bytearray solution

    【讨论】:

      【解决方案3】:

      字符串是不可变的,因此您永远无法找到仅替换字符串中的一个字符的方法。您应该使用数组来仅替换第 n 个元素。

      替换字符串以这种方式工作:

      mystr = "mystr"
      mystr.replace('t','i',1)
      'mysir'
      
      print mystr
      mystr
      

      可能是你需要的,也可能不是。

      【讨论】:

        【解决方案4】:

        不幸的是,python 中的字符串是不可变的,因此您必须使用几种解决方法之一才能做到这一点。

        上面提到的字节数组方法可以工作。

        您还可以将字符串用作列表:

            s = list("10010")
            s[2] = '1'
            test = "".join(s)
        

        拆分是另一种选择:

            s = '10010'
            s = s[:2] + '1' + s[3:]
        

        最后是string.replace,有几个人提到过。虽然您可以指定要替换的子字符串的实例数,但您不能用它替换任意子字符串,因此它不适合您的目的。

        【讨论】:

          【解决方案5】:
          test = "10010"
          test = test.replace(test[2],"1")
          print test
          '11111' #The desired output is '10110'
          

          你可以这样

          test2= test[0:1]+"1"+test[3:4]
          

          【讨论】:

            猜你喜欢
            • 2019-08-17
            • 2013-05-18
            • 2015-04-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-23
            • 2015-09-28
            相关资源
            最近更新 更多