替换python中的字符串中的一个字符

问题描述:

在python中,字符串是否可变?该生产线someString[3] = "a"引发错误替换python中的字符串中的一个字符

TypeError: 'str' object does not support item assignment

我明白为什么(我可以写someString [3] =“测试”,而显然是非法的),但有没有在Python做到这一点的方法?

+0

我有一个二进制字符串,并在一定条件下,我想翻转特定的0到1 – Chris 2010-01-29 21:19:04

+0

但是总体来说,我想翻转特定字母X到Y。现在我正在处理二进制字符串,但它是一个普通的查询 – Chris 2010-01-29 21:19:36

+0

另一个提示:如果你正在做“二进制字符串”,即只包含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

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

不是存储您的值作为一个字符串,你可以使用的字符列表:如果你想将其转换回字符串,以显示它

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

然后,使用这样的:

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

如果您每次更改大量字符,则此方法将比每次更改字符时生成新字符串的速度快得多。

+1

我也很喜欢这个答案。万分感谢。我需要习惯python风格的编程:) – Chris 2010-01-29 21:22:33

+0

@Chris:我强烈推荐这本书:http://www.amazon.ca/Programming-Python-Complete-Introduction-Language/dp/0137129297/ref=sr_1_6?即= UTF8&S =书籍和QID = 1264800285&SR = 8-6 – MikeyB 2010-01-29 21:25:44

在足够新的蟒蛇中,您还可以使用内置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