我想使用替換函數,但是我只想替換一個字符,而不是所有的那個字符的實例。Python替換函數
例如: -
>>> test = "10010"
>>> test = test.replace(test[2],"1")
>>> print test
>>> '11111' #The desired output is '10110'
有沒有一種方法,我可以做到這一點?
我想使用替換函數,但是我只想替換一個字符,而不是所有的那個字符的實例。Python替換函數
例如: -
>>> test = "10010"
>>> test = test.replace(test[2],"1")
>>> print test
>>> '11111' #The desired output is '10110'
有沒有一種方法,我可以做到這一點?
第str.replace()
取代全部該字符的實例。改爲使用bytearray
。
>>> test = bytearray('10010')
>>> test[2] = '1'
>>> str(test)
'10110'
沒有內置解決方案。但這裏有一個簡單的函數,它是:
>>> def replace_one_char(s, i, c):
... return s[:i] + c + s[i + 1:]
...
>>> replace_one_char('foo', 1, 'a')
'fao'
還要考慮伊格納西奧的bytearray solution。
字符串不可變,因此你永遠不會找到一種方法來替換字符串中的一個字符。您應該使用數組來只能替換第n個元素。
對字符串替換工作在這樣:
mystr = "mystr"
mystr.replace('t','i',1)
'mysir'
print mystr
mystr
可能是你需要什麼,可能是沒有。
不幸的是,python中的字符串是不可變的,因此您必須使用幾種解決方法之一來執行此操作。
已經提到的字節數組方法可以工作。
您也可以用字符串列表一起工作:
s = list("10010")
s[2] = '1'
test = "".join(s)
分裂是另一種選擇:
s = '10010'
s = s[:2] + '1' + s[3:]
最後,還有一個與string.replace,其中有幾個人提到。雖然可以指定要替換的子字符串的實例數,但不能用它替換任意的子字符串,因此它不適用於您的目的。
字符串是不可變的,這意味着無法替換字符串中的字符 - 您必須創建一個新的字符串。
如果您來自C-ish背景,這可能看起來很奇怪。但是在Python中,字符串更像是文字對象,它們是常量。想想它就像想要替換整數10010
的第3位數字,以便它成爲整數10110
。有些操作可以得到結果,但它不再是字面整數10010
,結果是不同的整數對象。
同樣,字符串文字'10010'
將始終爲字符串'10010'
,並且您應用的切片或替換量都不會改變該值。
解決的辦法是編寫一個幫助函數來做你想做的事情,它會返回一個新的字符串對象。
test = "10010"
test = test.replace(test[2],"1")
print test
'11111' #The desired output is '10110'
,你可以像這樣
test2= test[0:1]+"1"+test[3:4]
str.replace也可以替換子的任意量如果可選參數「maxreplace」中給出。 – kevintodisco 2012-02-08 05:53:02
@ktodisco:當然,但是這對這裏沒有幫助,因爲它總是從被替換的字符串實例開始算起,而第二個必須改變。 – 2012-02-08 05:55:36
@ktodisco,我最初想到了同樣的事情,然後我重讀了這個問題並刪除了我的回答:) – senderle 2012-02-08 05:56:41