2016-05-26 14 views
0

Nach dem Auffinden dieses Code-Schnipsel aus herePad rechts mehrzeiligen String

'{0: <16}'.format('Hi') 

konnte ich richtig Pad strings - das ist, was ich bin nach. Ich habe eine Funktion für mehrzeilige Strings geschrieben, aber ich habe das Gefühl, dass es eine schnellere, mehr pythonische Methode gibt: Die Strings werden mit "." nur als ein Beispiel.

#!/usr/bin/python 

def r_pad_string (s): 

    listy = s.splitlines() 

    w = 0 
    ss = "" 

    for i in range(0, len(listy)): 
    l = len(str(listy[i])) 
    if l > w: 
     w = l 

    for i in range(0, len(listy)): 
    pad = str(listy[i]).ljust(w, ".") 
    ss += pad + "\n" 

    return ss 


myStr1 = " ######\n" \ 
     " ########\n" \ 
     "## ## ##\n" \ 
     "## ### ###\n" \ 
     "##########\n" \ 
     "##########\n" \ 
     "## ## ##\n" \ 
     "# # #" 

myStr2 = """Spoons 
    are 
great!!!""" 

print r_pad_string(myStr1) 
print r_pad_string(myStr2) 

Antwort

1
def r_pad_string2(s, fillchar='.'):      
    lines = s.splitlines() 
    max_len = max(len(l) for l in lines) 
    return '\n'.join(l.ljust(max_len, fillchar) for l in lines) 

Timings:

In [12]: %timeit r_pad_string(myStr1) 
100000 loops, best of 3: 5.38 µs per loop 

In [13]: %timeit r_pad_string2(myStr1) 
100000 loops, best of 3: 3.43 µs per loop 

In [14]: %timeit r_pad_string(myStr2) 
100000 loops, best of 3: 2.48 µs per loop 

In [15]: %timeit r_pad_string2(myStr2) 
1000000 loops, best of 3: 1.9 µs per loop 

es ist also nicht so viel schneller, aber viel einfacher auf den Augen.

1

Die max -function existiert, die Ihre erste Schleife eliminiert. Und join können die Linien verwendet werden, wieder zusammen zu kleben:

def r_pad_string(s): 
    lines = s.splitlines() 
    width = max(len(l) for l in lines) 
    return "\n".join(
     line.ljust(width, ".") 
     for line in lines 
    ) 

Allgemeine Bemerkungen: Einbuchtung 4 Leerzeichen pro Ebene sein sollte, und Variablennamen sollte gesprochen werden. Das Iterieren über Zeilen kann direkt erfolgen, nicht mit Hilfe eines Indexes. Benutze nur leere Zeilen, wenn es wirklich lesbar ist. Die Elemente listy sind bereits Strings, also müssen sie nicht immer wieder in Strings konvertiert werden.

Verwandte Themen