2014-02-05 29 views
0

我正在尋找更優雅的方式來將字符串格式化爲人類可讀的語法。格式化字符串更容易理解

>>> a = 'ABCDEFGHIJKLMNOPQRSTUVWX' 
>>> # magic 
>>> print(a) 
'ABCD-EFGH-IJKL-MNOP-QRST-UVWX' 

我走到這一步:

>>> a = 'ABCDEFGHIJKLMNOPQRSTUVWX' 
>>> b = map(''.join, zip(*[iter(a)]*4)) 
>>> print(b) 
['ABCD', 'EFGH', 'IJKL', 'MNOP', 'QRST', 'UVWX'] 
>>> c = '-'.join(b) 
>>> print(c) 
'ABCD-EFGH-IJKL-MNOP-QRST-UVWX' 
+0

對於它的價值,我認爲你在那裏有相當好的。但如果你正在尋找替代品提供一些具體的標準(速度,內存使用等)將有所幫助 – wnnmaw

+1

可能重複的[Python - 連接字符串到元組](http://stackoverflow.com/questions/21351275/python -concatenated-string-to-a-tuple) –

+0

說實話 - 完全沒有速度或內存標準。我只是想「嗯,它不會是第一次在stackoverflow」 – Thomas

回答

3

你可以用這個做在一個行:

>>> a = 'ABCDEFGHIJKLMNOPQRSTUVWX' 
>>> "-".join([a[i:i+4] for i in range(len(a)/4)]) 
'ABCD-BCDE-CDEF-DEFG-EFGH-FGHI' 

在Python 3用途:"-".join([a[i:i+4] for i in range(int(len(a)/4))])

+0

您可以使用''//在Python 3中執行整數除法。 –

2
from itertools import izip_longest 

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx 
    args = [iter(iterable)] * n 
    return izip_longest(fillvalue=fillvalue, *args) 

def make_elegant(s, groupsize=4, joiner='-', pad=''): 
    return joiner.join(''.join(block) for block in grouper(s, groupsize, pad)) 

print make_elegant('ABCDEFGHIJKLMNOPQRSTUVWX') 

返回

ABCD-EFGH-IJKL-MNOP-QRST-UVWX