[英]Pad right multi-line string
從這里找到此代碼片段后
'{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)
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
所以它不是那么快,但在眼睛上更容易。
max
-function存在,這消除了你的第一個循環。 並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
的元素已經是字符串,所以不需要一遍又一遍地將它們轉換為字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.