【问题标题】:Replacing one character of a string in python在python中替换字符串的一个字符
【发布时间】:2011-01-11 00:46:25
【问题描述】:

在python中,字符串是可变的吗? someString[3] = "a" 行抛出错误

TypeError: 'str' 对象没有 支持项目分配

我明白为什么(因为我本可以写 someString[3] = "test",这显然是非法的)但是有没有在 python 中执行此操作的方法?

【问题讨论】:

  • 我有一个二进制字符串,在某些条件下,我想将特定的 0 翻转为 1。
  • 但一般来说,我想将特定字母 x 翻转为 y。现在我正在处理二进制字符串,但这是一般查询
  • 另一个提示:如果您正在处理“二进制字符串”,即仅由 1 和 0 组成的字符串,请查看 BitVector 之类的库,它可以更快、更方便地进行位向量操作。另外,请参阅stackoverflow.com/questions/2147848/… 上有关 Python 中位向量的问题

标签: python


【解决方案1】:

Python 字符串是不可变的,这意味着它们不支持项或切片分配。您必须使用 someString[:3] + 'a' + someString[4:] 或其他合适的方法构建一个新字符串。

【讨论】:

    【解决方案2】:

    您可以使用字符列表,而不是将值存储为字符串:

    >>> l = list('foobar')
    >>> l[3] = 'f'
    >>> l[5] = 'n'
    

    然后如果你想把它转换回一个字符串来显示它,使用这个:

    >>> ''.join(l)
    'foofan'
    

    如果您一次更改大量字符,则此方法将比每次更改字符时构建新字符串快得多。

    【讨论】:

      【解决方案3】:

      在足够新的 python 中,您还可以使用内置的 bytearray 类型,它是可变的。请参阅标准库文档。但是这里的“足够新”是指 2.6 或更高版本,所以这不一定是一个选项。

      在较旧的 python 中,您必须创建一个新的str,如上所述,因为它们是不可变的。这通常是最易读的方法,但有时使用不同类型的可变序列(如字符列表,或者可能是array.array)是有意义的。 array.array 虽然有点笨拙,但通常会避免使用。

      【讨论】:

        【解决方案4】:
        >>> import ctypes
        >>> s = "1234567890"
        >>> mutable = ctypes.create_string_buffer(s)
        >>> mutable[3] = "a"
        >>> print mutable.value
        123a567890
        

        【讨论】:

          【解决方案5】:

          使用这个:

          someString.replace(str(list(someString)[3]),"a")
          

          【讨论】:

          • someString = '0001' 并且你想替换第二个 0 你得到'aaa1' 这是不想要的
          【解决方案6】:

          只需定义一个与您想对当前字符串执行的操作相同的新字符串。

          a = str.replace(str[n],"")
           return a
          

          【讨论】:

          • 这将删除字符串中nth 字符的所有实例。此外,您不应该在 Python 内置函数之后命名变量(在这种情况下为 str
          猜你喜欢
          • 2018-12-11
          • 1970-01-01
          • 1970-01-01
          • 2021-12-24
          • 1970-01-01
          • 2018-05-19
          • 2021-06-13
          • 2019-10-01
          • 1970-01-01
          相关资源
          最近更新 更多