for循环中的s.replace行为异常

时间:2017-09-17 09:07:42

标签: python string python-2.7 replace

我写这篇文章来替换'babble'中的所有'b',除了第一个'。

s = 'babble'
for i in range(1, len(s)):
     if s[i] == s[0]:
         t = s.replace(s[i],'$')
print(t)

这打印'$ a $$ le'而不是'ba $$ le'。 那是为什么?

2 个答案:

答案 0 :(得分:0)

str.replace并不像你想象的那样工作。如果您看到文档说明

string.replace(s, old, new[, maxreplace])

  

返回字符串s的副本,其中出现所有子字符串old   换成新的。如果给出了可选参数maxreplace,那么   第一个maxreplace事件被替换。

如果你不想替换第一个字符,那么使用切片而不是循环,即

s = 'babble'
s = s[0] + s[1:].replace(s[0],'$')

输出:ba$$le

答案 1 :(得分:0)

另一种方法:

s = 'babble'
t = s[0]
for i in range(1, len(s)):
    if s[i] == s[0]:
        t += '$'
    else:
        t += s[i]
print(t)

<强>输出:

ba$$le