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)
7 Réponses :
Ajoutez simplement le dernier caractère à la chaîne plus courte jusqu'à ce que leur longueur soit la même. En Python, String * int em> est défini. Par exemple, "A" * 3 code> est
"AAA" code>. Donc
x = x + x [-1] * (len (y) -len (x)) code> 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.
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)
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!
Prenez d'abord les cordes de la même longueur et ensuite rejoindre. Quelque chose comme: sortie: p>
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
a Solution one-liner qui ne nécessite pas sortie: p> itTools < / Code>:
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 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 sortie: p> Cette implémentation garantira que string1 code>, puis voir ma mise à jour ci-dessous. strong> p>
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>
Mise à jour h2>
string1 code> est toujours imprimé en premier. p>
$ python zip.py
aebfcg
adbebfbg
aebfcfdf