在另一个字符串中加入一个字符串

时间:2018-05-23 07:58:07

标签: python string

我已经完成了这段代码,但输出并不像我想要的那样

def replace(s,p,n):
    return "".join("{}".format(p) if not i % n else char for i, char in enumerate(s,1))

print(replace("university","-",3))

我得到的输出是un-ve-si-y

我必须得到它: uni-ver-sit-y

4 个答案:

答案 0 :(得分:4)

这是一种方法。使用str切片。

<强>演示:

def replace(s,p,n):
    return p.join([s[i:i+n] for i in range(0, len(s), n)])

print(replace("university","-",3))

<强>输出:

uni-ver-sit-y

答案 1 :(得分:1)

如果您将代码扩展到多行:

chars_to_join = []
for i, char in enumerate(s,1):
    if not i % n:
        chars_to_join.append("{}".format(p))
    else:
        chars_to_join.append(char)

你会看到,当if语句为true时,它只是替换字符而不是在给定字符后包含替换字符,所以只需修改格式字符串以包含当前迭代的字符以及< / p>

"{}{}".format(char, p)

答案 2 :(得分:0)

对于这个问题,我认为列表理解不是一个好主意。目前尚不清楚。也许我们可以通过以下方式更清楚地说明:

def replace(s,p,n):
    new_list = []
    for i, c in enumerate(s, 1):
        new_list.append(c)
        if i % n == 0:
            new_list.append(p)

    return "".join(new_list)


print(replace("university","-",3))

答案 3 :(得分:0)

或者你可以这样做:

from itertools import repeat


def take(s, n):
    """"take n characters from s"""
    return s[:n]

def skip(s, n):
    """"skip n characters from s"""
    return s[n:]

def replace(s, p, n):

    # create intervals at which to prefix
    intervals = range(0, len(s), n)

    # create the prefix for all chunks
    prefix = map(skip, repeat(s), intervals)

    # trim prefix for n characters each
    chunks = map(take, prefix, repeat(n))

    return p.join(chunks)

现在:

replace('university', '-', 3)

会给你:

'uni-ver-sit-y'

注意:这是示例代码,如果这是有效的,您可能应该使用延迟评估函数(如islice),这可能会为较大的输入占用更少的内存。