间接修改Python字符串元素的三种方法

Python中的字符串对象是不能更改的,也即直接修改字符串中的某一位或几位字符是实现不了的,如:

str1="string"
str1[2]='x'

想要直接修改字符串的第三位,报出如下错误:

 TypeError:'str' object does not support item assignment

但是,对字符串重新赋值是可以的,如:

str1="string"
str1="stxing"

即python中字符串对象不可更改,但字符串对象的引用可更改,可重新指向新的字符串对象

当然,不能直接更改字符串对象,可以换一个思路,间接获得我们想要的字符串,方式可以有以下三种(当然肯定还有其他方法,欢迎在评论区留言写下你的好方法):

方法一:将字符串转换为列表,修改列表的元素后,在重新连接为字符串:

str1 = "string"
str2 = list(str1)    #将字符串转换为列表,列表的每一个元素为一个字符
str2[2] = 'x' 
str2 = ''.join(str2)     #将列表重新连接为字符串
print(str1,str2)
>>>string stxing

方法二:使用str.replace方法替换成我们想要的字符串

str1 = "string"
str2 = str1.replace(str1[2],'x')    #将字符串第三位替换为x
print(str1,str2)
>>>string stxing

非常感谢老铁的留言,指出了这种方法是存在缺陷的,replace函数用法:str.replace(old, new, max),是把字符串str中的所有old字符子串替换为new,max指定从左往右的最大替换次数,max可省略。

str1 = "rrrrrrrr"
str2 = str1.replace(str1[2],'x')    
print(str1,str2)
>>>rrrrrrrr xxxxxxxx
str1 = "rrrrrrrr"
str2 = str1.replace(str1[2],'x',1)    
print(str1,str2)
>>>rrrrrrrr xrrrrrrr

因此这种方法不适合单个字符或字符子串的修改,有可能会把所有相同字符子串都修改掉。

方法三:将字符串切片后相加:

str1 = "string"
str2 = str1[0:2]+'x'+str1[3:]   #先切后合
print(str1,str2)
>>>string stxing

可以看出, 以上的方法,都没有修改str1 的值,是通过不同的方法得到我们想要的字符串,不过我们再把str2赋给str1,就可达到修改字符串的目的。

另外,相比之下方法一相对灵活,可以对转换后的列表进行索引和修改,在字符串多处需要修改时尤为适用,但消耗的资源会稍多一些,尤其是在字符串较大的时候;方法二适合替换掉字符串中的所有指定字符子串;方法三则适合小范围的连续修改。

人生苦短,我用Python~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海晨威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值