9
votes

Combiner deux cordes (char de char) et répéter le dernier char du plus court

J'ai deux cordes (string1 et string2).

S'ils sont égaux de longueur, la fonction doit renvoyer une chaîne formée en alternant les caractères de chacune des deux chaînes. P>

S'ils ne sont pas égaux de longueur, la fonction étend la chaîne plus courte en répétant le dernier caractère jusqu'à ce qu'ils soient de la même longueur, puis alternent les caractères des deux chaînes. P>

Par exemple, P>

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)


0 commentaires

7 Réponses :


2
votes

Ajoutez simplement le dernier caractère à la chaîne plus courte jusqu'à ce que leur longueur soit la même. En Python, String * int est défini. Par exemple, "A" * 3 est "AAA" . Donc x = x + x [-1] * (len (y) -len (x)) fait ce que vous devez faire. Ensuite, vous devez simplement appeler de manière récursive la fonction avec les nouvelles valeurs de chaîne qui ont la même longueur. xxx


0 commentaires

1
votes

Vous pouvez accomplir le cas où la longueur n'est pas égale en trouvant la plus courte et la plus longue des chaînes, et ajoute n code> du caractère -1th code> du caractère plus court String à lui-même, où n code> est la différence de longueur entre le plus court et plus longtemps. À partir de là, vous retournez le même zip / rejoindre l'expression.

def extendedString(string1, string2):
    if len(string1) == len(string2):
        return "".join(i for j in zip(string1, string2) for i in j)
    else:
        longer, shorter = (string1, string2) if len(string1) > len(string2) else (string2, string1)
        shorter = shorter + shorter[-1] * (len(longer) - len(shorter))
        return "".join(i for j in zip(shorter, longer) for i in j)


0 commentaires

11
votes

3 commentaires

Ooh bien. Je ne savais pas à ce sujet.


iTertools est une grande bibliothèque à savoir :) peut vous faire économiser beaucoup de temps (et code!)


J'appréciera une note du Downvoter concernant le Downvote. Merci!



2
votes

Prenez d'abord les cordes de la même longueur et ensuite rejoindre. Quelque chose comme: xxx

sortie: xxx


0 commentaires

1
votes
a = "hell"
b = "heaven"
print "".join(i for j in itertools.izip_longest(a, b, fillvalue=a[-1] if len(a)<len(b) else b[-1]) for i in j)

Output: hheelalvleln

0 commentaires

7
votes

a Solution one-liner qui ne nécessite pas itTools < / Code>: xxx

sortie: xxx


0 commentaires

1
votes

OK, je me rends compte que cela a été répondu à Oblivion, mais j'avais déjà commencé à travailler sur le mien, alors cela va ici.

Note: Cette implémentation commencera toujours à imprimer la chaîne plus courte, si vous le souhaitez, si vous le souhaitez. Pour toujours commencer par imprimer le premier caractère de string1 code>, puis voir ma mise à jour ci-dessous. strong> p>

J'aime que vous copiez les paramètres d'entrée comme c'est une bonne habitude Pour préserver l'entrée, et je viens de la modifier légèrement pour ajouter une convention afin len (x) est toujours vrai. J'ai également choisi de ne pas utiliser d'autres bibliothèques, mais pour implémenter le code postal code> moi-même. P> xxx pré>

sortie: p> xxx pré >

Mise à jour h2>

Cette implémentation garantira que string1 code> est toujours imprimé en premier. p>

$ python zip.py
aebfcg
adbebfbg
aebfcfdf


0 commentaires