2013-03-06 350 views
-2

我需要在python字符串的每个3个字符上添加一个空格,但没有关于如何执行该操作的许多线索。Python - 如何在每个3个字符上添加空格?

字符串:

345 674 655 

就如何实现这一目标任何线索:

345674655 

,我需要的输出?

最好的问候,

+5

什么的'1234'所需的输出最佳功能? – NPE 2013-03-06 17:39:31

回答

20

你只需要一种方法来遍历你的字符串中块3

>>> a = '345674655' 
>>> [a[i:i+3] for i in range(0, len(a), 3)] 
['345', '674', '655'] 

然后' '.join结果。

>>> ' '.join([a[i:i+3] for i in range(0, len(a), 3)]) 
'345 674 655' 

需要注意的是:

>>> [''.join(x) for x in zip(*[iter(a)]*3)] 
['345', '674', '655'] 

也适用于分区的字符串。这将任意iterables(不只是字符串)工作,但截断,其长度不被3整除要恢复原始行为的字符串,可以使用itertools.izip_longest(在py3k itertools.zip_longest):

>>> import itertools 
>>> [''.join(x) for x in itertools.izip_longest(*[iter(a)]*3, fillvalue=' ')] 
['345', '674', '655'] 

当然,你付出一点在方便阅读,在这些后面的答案改进概括而言...

0

一个单行的解决方案将是

" ".join(splitAt(x,3)) 
然而

,Python是缺少splitAt()˚F油膏,所以自己定义一个

def splitAt(w,n): 
    for i in range(0,len(w),n): 
     yield w[i:i+n] 
0

与加入“ - ”经连结的各3个字符的第一,第二和第三个字符:

' '.join(a+b+c for a,b,c in zip(x[::3], x[1::3], x[2::3])) 

确保字符串长度可分3

1

基于@mgilson的回答

def litering_by_three(a): 
    return ' '.join([a[i:i + 3] for i in range(0, len(a), 3)]) 
# replace (↑) with you character like "," 
相关问题