我想使用替换函数,但是我只想替换一个字符,而不是所有的那个字符的实例。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