Python 在字符串中保留两个连续字符中的一个

Python 在字符串中保留两个连续字符中的一个,python,Python,因此,我想在函数中复制一个单词n次,但我想消除连续字符 例如repete(amanha,2)=“amanhamanha” 我的职能: def repete(palavra,n): a = [] b="" for n in range (0,n): a.append(palavra) b = b.join(a) return b 第一步是确定单词开头和结尾之间的最长重叠。next()函数可

因此,我想在函数中复制一个单词
n
次,但我想消除连续字符

例如
repete(amanha,2)=“amanhamanha”

我的职能:

def repete(palavra,n):
    
    a = []
    b=""
    
    for n in range (0,n): 
        a.append(palavra)

    b = b.join(a)   

    return b

第一步是确定单词开头和结尾之间的最长重叠。next()函数可用于获取要跳过的字符数,方法是获取从最长子字符串到最短子字符串的第一个匹配,如果没有重叠,则默认为零。然后可以在单词的剩余部分执行重复(即跳过公共部分的长度)

您还可以使用max()函数获取要跳过的长度(效率不如next(),但写入的长度更短):


所以,当word是
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
def repeat(w,n):
    skip = next((i for i in range(len(w)-1,0,-1) if w[:i]==w[-i:]),0)
    return w + (n-1)*w[skip:]

print(repeat("amanha",2))  # amanhamanha
print(repeat("abc",2))     # abcabc
print(repeat("abcdab",2))  # abcdabcdab
def repeat(w,n):
    skip = max(range(len(w)),key=lambda i:i*(w[:i]==w[-i:]))
    return w + (n-1)*w[skip:]