1. 程式人生 > >間接修改Python字串元素的三種方法

間接修改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~