在不使用.replace的情况下替换字符串而不是字符并将字符串连接起来

时间:2016-11-14 02:17:30

标签: python string python-3.x

有人问过类似的问题,但这里的所有帖子都指的是替换单个字符。我正在尝试替换字符串中的整个单词。我已经取代了它,但我不能用它们之间的空格打印它。

以下是替换它的函数replace

def replace(a, b, c):
    new = b.split()
    result = ''
    for x in new:
        if x == a:
            x = c
        result +=x
    print(' '.join(result))

用以下方式调用:

replace('dogs', 'I like dogs', 'kelvin')

我的结果是:

i l i k e k e l v i n 

我正在寻找的是:

I like kelvin

3 个答案:

答案 0 :(得分:1)

此处的问题是result是一个字符串,当join被调用时,它会占用result中的每个字符并将其加入空格。

相反,使用listappend(它比在字符串上使用+=更快)并通过解压缩打印出来。

那是:

def replace(a, b, c):
    new = b.split(' ')
    result = []
    for x in new:
        if x == a:
            x = c
        result.append(x)
    print(*result)

print(*result)将提供result列表的元素作为print的位置参数,并以默认的空格分隔打印出来。

"I like dogs".replace("dogs", "kelvin")当然可以在这里使用,但我很确定这会失败。

答案 1 :(得分:0)

只需将result列入清单,加入即可:

result = []

您只是生成一个长字符串并加入其字符。

答案 2 :(得分:0)

子串和空间保留方法:

def replace(a, b, c):
    # Find all indices where 'a' exists
    xs = []
    x = b.find(a)
    while x != -1:
        xs.append(x)
        x = b.find(a, x+len(a))

    # Use slice assignment (starting from the last index)
    result = list(b)
    for i in reversed(xs):
        result[i:i+len(a)] = c

    return ''.join(result)

>>> replace('dogs', 'I like dogs dogsdogs and   hotdogs', 'kelvin')
'I like kelvin kelvinkelvin and   hotkelvin'