组合两个字符串(逐个字符)并重复shortest on的最后一个字符

2024-05-12 18:48:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条弦,(弦1和弦2)。在

如果它们的长度相等,函数应该返回一个字符串,该字符串由两个字符串中的每个字符串的交替字符组成。在

如果它们的长度不相等,则函数通过重复最后一个字符来扩展较短的字符串,直到它们的长度相同,然后交替两个字符串的字符。在

例如

extendedString("abc", "def") =>  "adbecf" 
extendedString("ab", "defg") =>  "adbebfbg"

我写了字符串长度相同时返回的部分,但我不知道如何重复最后一个字符。在

^{pr2}$

Tags: 函数字符串abdef字符abcpr2defg
3条回答

首先使两个字符串长度相同,然后连接起来。比如:

def extendedString(string1,string2):
    x=string1
    y=string2

    if len(x) < len(y):
        x = x + x[-1] * (len(y) - len(x))
    elif len(x) > len(y):
        y = y + y[-1] * (len(x) - len(y))

    return "".join(i for j in zip(x, y) for i in j)

print extendedString("abc", "def")
print extendedString("ab","defg") 
print extendedString("defg","ab") 

输出:

^{pr2}$

您可以使用itertools中的^{} function
工作原理与zip相似,但允许您填充空白(默认填充为“无”,但您可以更改它:

import itertools

def extendedString(string1,string2):
    filler = string2[-1] if len(string1)>len(string2) else string1[-1]
    return "".join(i for j in itertools.zip_longest(string1, string2, fillvalue=filler) for i in j)

更新

添加了filler作为最短字符串的最后一个字符(如果需要的话)

^{pr2}$

如果您使用的是python2函数是itertools.izip_longest

不需要itertoolsone-liner解决方案:

def extendedString(a,b):
    return ''.join(x+y for x,y in zip(*(s+s[-1]*(max(len(a),len(b))-len(s)) for s in (a,b))))

输出:

^{pr2}$

相关问题 更多 >