【问题标题】:Python: Replace a character in string [duplicate]Python:替换字符串中的字符[重复]
【发布时间】:2017-11-10 05:50:59
【问题描述】:

如何调整下面的函数,如果分配给st1的变量根本没有出现在字符串中(1没有出现在字符串中,并且字符串是*********),该函数只是返回字符串@987654322 @ 但如果字符串确实包含 1,它会将每个 1 替换为 2,如下所示。感谢您的帮助。

def replacest1(string,st1,st2):
for i in string:
    if i == st1:
        N_W = string.replace(st1 , st2)
        return N_W
        print(replacest1("***1***1***","1","2"))

【问题讨论】:

  • 我不确定你是否需要一个函数。给定三个字符串footokrep,只需使用foo.replace(tok, rep) 将返回foo,所有tok 实例都替换为rep。如果foo 包含tokno 个实例,它将简单地返回原始字符串foo。此外,我认为 for 循环是不必要的(并且可能会给您带来最大的麻烦)。
  • 对于分配,需要用 s2 替换 st1 的每个实例。如果字符串不包含st1,我们只返回字符串。
  • 顺便说一句,string 不是变量名的好选择:它是标准模块的名称。
  • @PM2Ring:是的,我正要这么说。不要选择这样的标识符非常重要。

标签: python


【解决方案1】:
def replacest1(string, st1, st2):
    return string.replace(st1, st2)

测试:

replacest1("abcdefdcba", "c", "x")

结果:

"abxdefdxba"

测试:

replacest1("yyyyzzzz", "c", "x")

结果:

"yyyyzzzz"

或者好多了:

"abcdefdcba".replace("c", "x")

请注意,上面定义的函数与问题要求的函数是 1:1 对应的。使用string 作为标识符不是一个好习惯。我强烈建议不要使用这种标识符。


注意:由于可以完全消除此类函数的定义,因为 string.replace() 在已弃用时仍然存在,因此上述解决方案仍将包含问题中使用的标识符 string。如果无法消除该函数,我将在此处使用不同的标识符,但由于根本不需要定义自己的函数,因此我暂时让该标识符保持原样。


这里是一个不使用string.replace()的变体:

def replaceCharacters(inputString, findChar, replaceChar):
    assert isinstance(inputString, str)
    assert isinstance(findChar, str)
    assert len(findChar) == 1
    assert isinstance(replaceChar, str)
    assert len(replaceChar) == 1

    buffer = ""
    for c in inputString:
        buffer += replaceChar if c == findChar else c
    return buffer

注意:我更喜欢使用断言来检测编程错误。如果在您的用例中性能不是一个大问题,这些断言不会造成任何问题,但可以防止意外误用这样的函数:如果您不小心传递了错误的参数,断言将失败并立即给您反馈。

【讨论】:

  • 您能否重命名string 参数(也许改名为source_string)?老实说,我一开始还以为您在调用已弃用的 string.replace 函数。
  • 是的,你是对的。我正在使用已弃用的字符串替换。它仍然存在,尽管它似乎不再被记录在案。我会再次更新答案。
  • 现在应该会更好。
猜你喜欢
  • 2015-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2018-10-22
  • 2011-10-10
  • 2021-06-17
  • 2012-10-05
相关资源
最近更新 更多