2012-02-08 366 views
2

我想使用替換函數,但是我只想替換一個字符,而不是所有的那個字符的實例。Python替換函數

例如: -

>>> test = "10010" 
>>> test = test.replace(test[2],"1") 
>>> print test 
>>> '11111' #The desired output is '10110' 

有沒有一種方法,我可以做到這一點?

回答

4

str.replace()取代全部該字符的實例。改爲使用bytearray

>>> test = bytearray('10010') 
>>> test[2] = '1' 
>>> str(test) 
'10110' 
+0

str.replace也可以替換子的任意量如果可選參數「maxreplace」中給出。 – kevintodisco 2012-02-08 05:53:02

+1

@ktodisco:當然,但是這對這裏沒有幫助,因爲它總是從被替換的字符串實例開始算起,而第二個必須改變。 – 2012-02-08 05:55:36

+0

@ktodisco,我最初想到了同樣的事情,然後我重讀了這個問題並刪除了我的回答:) – senderle 2012-02-08 05:56:41

4

沒有內置解決方案。但這裏有一個簡單的函數,它是:

>>> def replace_one_char(s, i, c): 
...  return s[:i] + c + s[i + 1:] 
... 
>>> replace_one_char('foo', 1, 'a') 
'fao' 

還要考慮伊格納西奧的bytearray solution

1

字符串不可變,因此你永遠不會找到一種方法來替換字符串中的一個字符。您應該使用數組來只能替換第n個元素。

對字符串替換工作在這樣:

mystr = "mystr" 
mystr.replace('t','i',1) 
'mysir' 

print mystr 
mystr 

可能是你需要什麼,可能是沒有。

1

不幸的是,python中的字符串是不可變的,因此您必須使用幾種解決方法之一來執行此操作。

已經提到的字節數組方法可以工作。

您也可以用字符串列表一起工作:

s = list("10010") 
    s[2] = '1' 
    test = "".join(s) 

分裂是另一種選擇:

s = '10010' 
    s = s[:2] + '1' + s[3:] 

最後,還有一個與string.replace,其中有幾個人提到。雖然可以指定要替換的子字符串的實例數,但不能用它替換任意的子字符串,因此它不適用於您的目的。

0

字符串是不可變的,這意味着無法替換字符串中的字符 - 您必須創建一個新的字符串。

如果您來自C-ish背景,這可能看起來很奇怪。但是在Python中,字符串更像是文字對象,它們是常量。想想它就像想要替換整數10010的第3位數字,以便它成爲整數10110。有些操作可以得到結果,但它不再是字面整數10010,結果是不同的整數對象。

同樣,字符串文字'10010'將始終爲字符串'10010',並且您應用的切片或替換量都不會改變該值。

解決的辦法是編寫一個幫助函數來做你想做的事情,它會返回一個新的字符串對象。

0
test = "10010" 
test = test.replace(test[2],"1") 
print test 
'11111' #The desired output is '10110' 

,你可以像這樣

test2= test[0:1]+"1"+test[3:4]