Zeichenfolge bis zu einer bestimmten Länge wiederholen
Wie lässt sich eine Zeichenkette bis zu einer bestimmten Länge effizient wiederholen? Z.B.: repeat('abc', 7) -> 'abcabca'
Hier ist mein aktueller Code:
def repeat(string, length):
cur, old = 1, string
while len(string) < length:
string += old[cur-1]
cur = (cur+1)%len(old)
return string
Gibt es einen besseren (pythonischeren) Weg, dies zu tun? Vielleicht mit List Comprehension?
185
3
Die Antwort von Jason Scheirer'ist richtig, könnte aber noch etwas ausführlicher sein.
Zunächst einmal, um eine Zeichenfolge eine ganze Zahl von Zeiten zu wiederholen, können Sie überladen Multiplikation verwenden:
Um also eine Zeichenkette zu wiederholen, bis sie mindestens so lang ist wie die gewünschte Länge, berechnet man die entsprechende Anzahl von Wiederholungen und setzt sie auf die rechte Seite des Multiplikationsoperators:
Dann können Sie sie mit einem Array-Slice auf die gewünschte Länge kürzen:
Alternativ, wie in pillmod's Antwort vorgeschlagen, die wahrscheinlich niemand mehr weit genug nach unten scrollt, um sie zu bemerken, können Sie
divmod
verwenden, um die Anzahl der benötigten vollständigen Wiederholungen und die Anzahl der zusätzlichen Zeichen auf einmal zu berechnen:Was ist besser? Machen wir einen Vergleich:
Die pillmod'-Version ist also etwa 40% langsamer, was schade ist, da ich persönlich denke, dass sie viel lesbarer ist. Dafür gibt es mehrere mögliche Gründe, angefangen bei der Kompilierung von etwa 40% mehr Bytecode-Anweisungen.
Hinweis: Diese Beispiele verwenden den neuartigen
//
-Operator zum Abschneiden von Integer-Divisionen. Dies wird oft als Python 3-Feature bezeichnet, aber laut PEP 238 wurde es bereits in Python 2.2 eingeführt. Man muss ihn nur in Python 3 verwenden (oder in Modulen, diefrom __future__ import division
haben), aber man kann ihn trotzdem verwenden.Für python3:
Wie wäre es mit
string * (length / len(string)) + string[0:(length % len(string))]