2016-05-26 5 views
0

После того, как найти этот фрагмент кода из herePad права многострочного строка

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

Я был в состоянии правильных строк прокладочных - что то, что я после. Я написал функцию для работы с многострочными строками, но я чувствую, что есть более быстрый, более Pythonic метод: Строки заполняются с помощью.. как пример.

#!/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) 

ответ

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) 

тайминги:

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 

Так что это не то, что намного быстрее, но намного легче на глазах.

1

max -функции существует, что исключает первый цикл. И join могут быть использованы, чтобы придерживаться линии снова вместе:

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 
    ) 

Общие замечания: отступы должны быть 4 пробела на уровне и имена переменных должны говорить. Итерация по линиям может быть выполнена напрямую, а не с помощью индекса. Используйте только пустые строки, когда это действительно помогает читаемости. Элементы listy уже являются строками, поэтому нет необходимости конвертировать их в строки снова и снова.

Смежные вопросы