替换python中的字符串中的一个字符
问题描述:
在python中,字符串是否可变?该生产线someString[3] = "a"
引发错误替换python中的字符串中的一个字符
TypeError: 'str' object does not support item assignment
我明白为什么(我可以写someString [3] =“测试”,而显然是非法的),但有没有在Python做到这一点的方法?
答
Python字符串是不可变的,因此它们不支持项目或切片分配。您必须使用someString[:3] + 'a' + someString[4:]
或其他合适的方法构建新的字符串。
答
不是存储您的值作为一个字符串,你可以使用的字符列表:如果你想将其转换回字符串,以显示它
>>> l = list('foobar')
>>> l[3] = 'f'
>>> l[5] = 'n'
然后,使用这样的:
>>> ''.join(l)
'foofan'
如果您每次更改大量字符,则此方法将比每次更改字符时生成新字符串的速度快得多。
答
在足够新的蟒蛇中,您还可以使用内置bytearray
类型,这是可变的。请参阅stdlib文档。但是,“足够新”意味着2.6或更高,所以这不一定是一种选择。
在较老的python中,您必须创建一个新的str
,如上所述,因为这些是不可变的。这通常是最可读的方法,但有时使用不同类型的可变序列(如字符列表,或可能是array.array
)是合理的。 array.array
虽然有点笨重,并且通常可以避免。
答
>>> import ctypes
>>> s = "1234567890"
>>> mutable = ctypes.create_string_buffer(s)
>>> mutable[3] = "a"
>>> print mutable.value
123a567890
我有一个二进制字符串,并在一定条件下,我想翻转特定的0到1 – Chris 2010-01-29 21:19:04
但是总体来说,我想翻转特定字母X到Y。现在我正在处理二进制字符串,但它是一个普通的查询 – Chris 2010-01-29 21:19:36
另一个提示:如果你正在做“二进制字符串”,即只包含1和0的字符串,检查像BitVector这样的库,这是更快,更方便用于位矢量操作。 此外,请参阅位于Python的位向量问题http://stackoverflow.com/questions/2147848/how-do-i-represent-and-work-with-n-bit-vectors-in-python/2147873 #2147873 – 2010-01-29 21:21:42