Python中替换字符串中字符的最简单方法是:
text = "abcdefg";
text[1] = "Z";
^
Run Code Online (Sandbox Code Playgroud)
scv*_*lex 486
不要修改字符串.
与他们一起作为名单; 只在需要时将它们变成字符串.
>>> 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'
Run Code Online (Sandbox Code Playgroud)
Python字符串是不可变的(即它们不能被修改).这有很多原因.使用列表直到您别无选择,只有将它们转换为字符串.
Meh*_*len 170
有三种方法.对于速度寻求者,我建议'方法2'
方法1
由这个答案给出
text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)
Run Code Online (Sandbox Code Playgroud)
与"方法2"相比,这相当慢
timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027
Run Code Online (Sandbox Code Playgroud)
方法2(快速方法)
由这个答案给出
text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]
Run Code Online (Sandbox Code Playgroud)
哪个更快:
timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195
Run Code Online (Sandbox Code Playgroud)
方法3:
字节数组:
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
Run Code Online (Sandbox Code Playgroud)
Joc*_*zel 124
new = text[:1] + 'Z' + text[2:]
Run Code Online (Sandbox Code Playgroud)
Mar*_*ett 33
Python字符串是不可变的,您可以通过制作副本来更改它们.
做你想做的最简单的方法可能就是.
text = "Z" + text[1:]
Run Code Online (Sandbox Code Playgroud)
文本[1:]将文本中的字符串从位置1返回到结尾,位置计数从0开始,因此"1"是第二个字符.
编辑:您可以对字符串的任何部分使用相同的字符串切片技术
text = text[:1] + "Z" + text[2:]
Run Code Online (Sandbox Code Playgroud)
或者,如果只出现一次字母,您可以使用下面建议的搜索和替换技术
Mah*_*oud 13
从python 2.6和python 3开始,你可以使用可变的bytearrays(可以像字符串一样改变字符串):
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg
Run Code Online (Sandbox Code Playgroud)
编辑:将str更改为s
edit2:作为评论中提到的Two-Bit Alchemist,此代码不适用于unicode.
小智 8
这段代码不是我的。我不记得网站表格在哪里,我拿了它。有趣的是,您可以使用它用一个或多个字符替换一个或多个字符。虽然这个回复很晚,但像我这样的新手(任何时候)可能会觉得它很有用。
mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,
Run Code Online (Sandbox Code Playgroud)
就像其他人所说的那样,通常 Python 字符串应该是不可变的。
但是,如果您使用 CPython(python.org 上的实现),则可以使用 ctypes 来修改内存中的字符串结构。
这是我使用该技术清除字符串的示例。
为了完整起见,我提到了这一点,这应该是您的最后手段,因为它是骇人听闻的。
字符串在 Python 中是不可变的,这意味着您不能更改现有字符串。但是如果你想改变其中的任何字符,你可以创建一个新的字符串,如下所示,
def replace(s, position, character):
return s[:position] + character + s[position+1:]
Run Code Online (Sandbox Code Playgroud)
replace('King', 1, 'o')
// 结果:Kong
注意:如果你给的位置值大于字符串的长度,它会在末尾追加字符。
replace('Dog', 10, 's')
// 结果:Dogs
我喜欢 F 弦:
text = f'{text[:1]}Z{text[2:]}'
Run Code Online (Sandbox Code Playgroud)
在我的机器上,这个方法比使用 + 连接字符串的“快速方法”快 10%:
>>> timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
1.1691178000000093
>>> timeit.timeit("text = 'abcdefg'; text = f'{text[:1]}Z{text[2:]}'", number =1000000)
0.9047831999999971
>>>
Run Code Online (Sandbox Code Playgroud)