在Python中如何修改字符串中的某一位字符?
python中字符串是不可变类型,即无法直接修改字符串的某一位字符。
例如想把'abc123'修改成'abcd23',若执行下面代码:
a = 'abc123'
a[3] = 'd' # 字符串下标是从0开始的,3代表第4个字符
会报错:
TypeError: 'str' object does not support item assignment
因为python语法中,字符串不支持直接赋值。
我们在编程时会经常遇到处理字符串,python修改字符串主要有3种方法:切片法、重新赋值和replace函数。
设当前字符串a = 'abc123',想要修改成'abcd123'。
法一:切片法
把字符串“切开”,在需要的地方添加进去新字符,再用加号连接。
# 法一:切片
# 设当前字符串a = "abc123",想要修改成"abcd123"
a = 'abc123'
a = a[:3] + 'd' + a[3:6] # [m:n]代表从下标m开始到下标n-1的字符;不写m的话默认为0
# 此处相当于取出来'abc',再后面加上'd',再加上'123'
print(a) # 输出abcd123
法二:重新赋值
最简单粗暴的方法,直接覆盖掉原变量。
但其实变量并没有真的被“修改”,前后变量a占用的是不同的内存指针。可以用 id(a) 观察实际的内存指针。
# 法二:重新赋值
# 设当前字符串a = "abc123",想要修改成"abcd123"
a = 'abc123'
print(id(a))
a = 'abcd123'
print(id(a))
print(a) # 输出abcd123
执行上面代码,得到的输出是:
2138944357488
2138944252016
abcd123
可以看到,最终得到了我们想要的字符串'abcd123'。但前后变量a的内存并不相同。
这说明原本的a并没有被修改,而是被配置到了新的内存。
对于新手来说,不需要在此太纠结,能达到修改目的即可。感兴趣的同学可以去查阅python的内存机制。
法三:replace函数
python自带的replace函数,能替换掉指定的部分。
a = a.replace('c', 'cd')意味着把a中的'c'改为'cd'。
a = 'abc123'
a = a.replace('c', 'cd')
print(a) # 输出abcd123
该方法的缺点是,必须知道要修改的位置的字符究竟是什么。
如果字符串始终在变化,那么还是需要靠切片法根据下标来修改。
来源:数学建模BOOM