在Python中,替换字符串中的一个字符的最简单方法是什么?
比如说
text = "abcdefg";
text[1] = "Z";
^
不要修改字符串。
把它们当作列表来处理;只有在需要时才把它们变成字符串。
>>> 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'
Python 字符串是不可改变的 (也就是说,它们不能被修改)。 这有 很多 个原因。 使用列表直到你别无选择,然后才把它们变成字符串。
有三种方法。 对于追求速度的人,我推荐'方法2'。
方法1
由这个[答案][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(快速方法)。
由这个[答案][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
[1]: https://stackoverflow.com/a/1228597/2571620 [2]: https://stackoverflow.com/a/1228332/2571620
new = text[:1] + 'Z' + text[2:]
Python 字符串是不可改变的,你可以通过复制来改变它们。
做你想做的事的最简单方法可能是。
text = "Z" + text[1:]
text[1:] 返回文本中从位置1到结尾的字符串,位置从0开始计算,所以'1'是第二个字符。
编辑。 你可以对字符串的任何部分使用同样的字符串切分技术
text = text[:1] + "Z" + text[2:]
或者,如果该字母只出现一次,你可以使用建议的搜索和替换技术 如下
从 python 2.6 和 python 3 开始,你可以使用字节数,因为字节数是可突变的(与字符串不同,可以逐个元素改变)。
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg
编辑。 将str改为s
edit2.正如Two-Bit Alchemist在评论中提到的那样,这段代码不能与unicode一起使用。 正如Two-Bit Alchemist在评论中提到的,这段代码不能与unicode一起使用。
就像其他人说的那样,一般Python的字符串应该是不可变的。
但是,如果你使用的是CPython,也就是python.org的实现,就可以使用ctypes来修改内存中的字符串结构。
下面是我使用该技术清除字符串的一个例子。
https://stackoverflow.com/questions/982682/mark-data-as-sensitive-in-python/983525#983525
我提这个是为了完整,这应该是你最后的手段,因为它是黑客。
其实,用字符串,你可以做这样的事情。
oldStr = 'Hello World!'
newStr = ''
for i in oldStr:
if 'a' < i < 'z':
newStr += chr(ord(i)-32)
else:
newStr += i
print(newStr)
'HELLO WORLD!'
基本上,我'm "添加"+"字符串"。 组合成一个新的字符串:)。