7

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

字符串:

345674655

我需要的输出:

345 674 655   

关于如何实现这一目标的任何线索?

最好的祝福,

4

5 回答 5

26

您只需要一种方法以 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']

也适用于对字符串进行分区。这将适用于任意可迭代对象(不仅仅是字符串),但会截断长度不能被 3 整除的字符串。要恢复原始的行为,您可以使用itertools.izip_longestitertools.zip_longest在 py3k 中):

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

当然,您需要为后一个答案中改进的概括性支付一点阅读费用......

于 2013-03-06T17:39:12.350 回答
3

基于@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 ","

输出示例:

>>> x="500000"
>>> print(litering_by_three(x))
'500 000'
>>> 

或者,例如:

>>> def litering_by_three(a):
>>>         return ','.join([a[i:i + 3] for i in range(0, len(a), 3)])
>>>     #  replace (↑) with you character like ","
>>> print(litering_by_three(x))
'500,000'
>>> 
于 2018-01-31T20:02:22.323 回答
2

单线解决方案将是

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

然而,Python 缺少一个splitAt()函数,所以定义自己一个

def splitAt(w,n):
    for i in range(0,len(w),n):
        yield w[i:i+n]
于 2016-02-19T16:14:48.800 回答
2

如何将字符串从单位开始反转 3,然后再次反转。目标是获得“12 345”。

n="12345"    
" ".join([n[::-1][i:i+3] for i in range(0, len(n), 3)])[::-1]
于 2021-02-19T16:35:53.813 回答
0

用 '-' 连接每 3 个字符的第一个、第二个和第三个字符:

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

确保字符串长度可被 3 整除

于 2017-11-28T04:34:10.853 回答