2012-02-08 141 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]