Python s、 for循环中的replace行为异常

Python s、 for循环中的replace行为异常,python,string,python-2.7,replace,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”。 为什么会这样?str.replace不能按您的想法工作。如果你看到文件上写着 string.replace(s,old,new[,maxreplace]) 返回包含所有子字符

我写这篇文章是为了替换“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”。
为什么会这样?

str.replace不能按您的想法工作。如果你看到文件上写着

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

返回包含所有子字符串old的字符串s的副本 换成新的。如果给出可选参数maxreplace,则 将替换第一个maxreplace引用

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

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

另一种方法:

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

为什么你希望它打印“ba$$leAha,现在我明白你的误解了。”。不能将整个字符串的索引传递给
replace()
,而是一次替换字符串中的所有内容。尝试打印
t
t=s.replace(s[i],“$”)
之后,您将看到在第一次迭代后完成完全替换,后续迭代只需继续打印相同的内容。这很有帮助。我误解了s.replace的用法。非常感谢。