Python s、 for循环中的replace行为异常
我写这篇文章是为了替换“babble”中除第一个之外的所有“b”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]) 返回包含所有子字符
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的用法。非常感谢。