组合两个字符串(char by char)并重复最短的一个char

Haw*_*ent 9 python string

我有两个字符串,(string1和string2).

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

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

例如,

extendedString("abc", "def") =>  "adbecf" 
extendedString("ab", "defg") =>  "adbebfbg"
Run Code Online (Sandbox Code Playgroud)

如果字符串的长度相同,我已经写了它返回的部分,但我不知道如何重复最后一个字符.

def extendedString(string1, string2):
    x = string1
    y = string2
    z = ""
    if len(x) == len(y):
        return "".join(i for j in zip(string1,string2) for i in j)
Run Code Online (Sandbox Code Playgroud)

Dek*_*kel 11

您可以使用itertools中的zip_longest函数.
像zip一样工作,但是你可以填充空白(默认填充是None,但你可以改变它:

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)
Run Code Online (Sandbox Code Playgroud)

更新

添加填充物作为最短字符串的最后一个字符(如果需要)

In [50]: extendedString("abc","def")
Out[50]: 'adbecf'

In [51]: extendedString("ab","defg")
Out[51]: 'adbebfbg'
Run Code Online (Sandbox Code Playgroud)

如果你使用python2函数是itertools.izip_longest

  • itertools是一个很棒的库知道:)可以节省你很多时间(和代码!) (3认同)

gdl*_*lmx 7

一个只有一行的解决方案,不要求itertools:

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))))
Run Code Online (Sandbox Code Playgroud)

输出:

$ extendedString('abc','1234')
'a1b2c3c4'
$ extendedString('abc','12')
'a1b2c2'
Run Code Online (Sandbox Code Playgroud)