在Python中替换字符串中的字符最简单的方法是什么?
例如:
text = "abcdefg";
text[1] = "Z";
^
在Python中替换字符串中的字符最简单的方法是什么?
例如:
text = "abcdefg";
text[1] = "Z";
^
当前回答
在单行if语句中结合find和replace方法的解决方案可以是:
```python
my_var = "stackoverflaw"
my_new_var = my_var.replace('a', 'o', 1) if my_var.find('s') != -1 else my_var
print(f"my_var = {my_var}") # my_var = stackoverflaw
print(f"my_new_var = {my_new_var}") # my_new_var = stackoverflow
```
其他回答
在单行if语句中结合find和replace方法的解决方案可以是:
```python
my_var = "stackoverflaw"
my_new_var = my_var.replace('a', 'o', 1) if my_var.find('s') != -1 else my_var
print(f"my_var = {my_var}") # my_var = stackoverflaw
print(f"my_new_var = {my_new_var}") # my_new_var = stackoverflow
```
正如其他人所说,通常Python字符串应该是不可变的。
但是,如果你使用的是CPython (python.org上的实现),则可以使用ctypes来修改内存中的字符串结构。
下面是我使用该技术清除字符串的示例。
在python中将数据标记为敏感
为了完整起见,我提到了这一点,这应该是您最后的手段,因为它很粗糙。
如果你的世界是100% ascii/utf-8(很多用例适合这个盒子):
b = bytearray(s, 'utf-8')
# process - e.g., lowercasing:
# b[0] = b[i+1] - 32
s = str(b, 'utf-8')
python 3.7.3
最快的方法?
有三种方法。对于追求速度的人,我推荐“方法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
方法二(快速法)
由这个答案给出
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
字符串在Python中是不可变的,这意味着你不能改变现有的字符串。 但如果你想改变其中的任何字符,你可以创建一个新的字符串,如下所示,
def replace(s, position, character):
return s[:position] + character + s[position+1:]
replace('King', 1, 'o') // result: Kong
注意:如果你给出的位置值大于字符串的长度,它将在结尾追加字符。
replace('Dog', 10, 's') //结果:狗