更改string中的一个字符?

Python中最简单的方法是如何replacestring中的字符:

text = "abcdefg"; text[1] = "Z"; ^ 

不要修改string。

与他们一起作为名单; 只在需要的时候把它们变成string。

 >>> s = list("Hello zorld") >>> s ['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd'] >>> s[6] = 'W' >>> s ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'] >>> "".join(s) 'Hello World' 

Pythonstring是不可变的(即它们不能被修改)。 这有很多原因。 使用列表,直到你别无select,只有把它们变成string。

 new = text[:1] + 'Z' + text[2:] 

最快的方法?

有三种方法。 对于求职者,我推荐“方法2”

方法1

由这个答案给出

 text = 'abcdefg' new = list(text) new[6] = 'W' ''.join(new) 

与“方法2”相比,这相当慢

 timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000) 1.0411581993103027 

方法2(快速方法)

由这个答案给出

 text = 'abcdefg' text = text[:1] + 'Z' + text[2:] 

哪一个更快:

 timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000) 0.34651994705200195 

方法3:

字节数组:

 timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000) 1.0387420654296875 

Pythonstring是不可变的,你可以通过复制来改变它们。
做你想要的最简单的方法可能是。

 text = "Z" + text[1:] 

文本[1:]返回从位置1到结尾的文本中的string,位置从0开始计数,所以'1'是第二个字符。

编辑:您可以使用相同的string切片技术的任何部分的string

 text = text[:1] + "Z" + text[2:] 

或者如果信件只出现一次,您可以使用下面build议的search和replace技术

从python 2.6和python 3开始,你可以使用可变的bytearrays(可以像string那样改变元素):

 s = "abcdefg" b_s = bytearray(s) b_s[1] = "Z" s = str(b_s) print s aZcdefg 

编辑:改变str到s

编辑2:作为在评论中提到的两位炼金术士,这个代码不适用于unicode。

就像其他人所说的,通常Pythonstring应该是不可变的。

但是,如果使用CPython(在python.org上的实现),则可以使用ctypes来修改内存中的string结构。

这里是我使用该技术清除string的一个示例。

在Python中将数据标记为敏感

我提到这是为了完整性,这应该是你最后的手段,因为它是hackish。

其实,用string,你可以做这样的事情:

 oldStr = 'Hello World!' newStr = '' for i in oldStr: if 'a' < i < 'z': newStr += chr(ord(i)-32) else: newStr += i print(newStr) 'HELLO WORLD!' 

基本上,我是“添加”+“string”到一个新的string:)。

这个代码不是我的。 我无法回想起那个网站的forms,我拿了它。 有趣的是,你可以使用这个replace一个或多个charectors一个或多个字符。 尽pipe这个答复很晚,但是像我这样的新手也许会觉得它有用。

改变文字function。

 mytext = 'Hello Zorld' mytext = mytext.replace('Z', 'W') print mytext, 

一个非常简单的方法是做到这一点:

 word = "Heloo World!" word = word.replace(word[3], "l", 1) print word 

输出:

  Hello World!