更改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!