【问题标题】:s.replace within a for loop behaves strangelys.replace 在 for 循环中的行为很奇怪
【发布时间】:2017-09-17 09:07:42
【问题描述】:

我写这个是为了替换 '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'。 这是为什么呢?

【问题讨论】:

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

标签: python string python-2.7 replace


【解决方案1】:

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

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

返回所有出现的子字符串 old 的字符串 s 的副本 换成新的。如果给出了可选参数 maxreplace,则 第一次出现的 maxreplace 被替换。

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

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

输出:ba$$le

【讨论】:

    【解决方案2】:

    另一种方法:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多