我试图以更易读的方式输出更长的整数。如何在一定数量的数字后将其格式化为带空格的字符串?
例如,我希望将12345678
输出为1234 56 78
答案 0 :(得分:5)
一个选项是使用re
模块,将数字与正则表达式匹配并重新格式化:
import re
re.sub(r"(\d{4})(\d{2})(\d{2})", r"\1 \2 \3", "12345678")
# '1234 56 78'
或者为了便于阅读,您可能希望使用千位分隔符对其进行格式化:
"{:,d}".format(12345678)
# '12,345,678'
答案 1 :(得分:1)
您也可以使用itertools
和str.join()
:
>>> from itertools import zip_longest
>>>
>>> def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
>>> def pretty_print(start, number, delim=' '):
number = str(number)
end = delim.join(''.join(g) for g in grouper(number[start:], 2, ''))
return number[:start] + delim + end
>>> number = 12345678
>>> pretty_print(4, number, ' ')
'1234 56 78'
>>> pretty_print(4, number, ',')
'1234,56,78'
>>> pretty_print(4, number, '|')
'1234|56|78'
答案 2 :(得分:1)
你可以这样做:
>>> from itertools import islice
>>> def solve(num, n=4):
... s = str(num)
... fmt = [n] + [2] * ((len(s) - n) // 2);
... it = iter(s)
... return ' '.join(''.join(islice(it, x)) for x in fmt)
>>> solve(12345678)
'1234 56 78'
>>> solve(1234567890)
'1234 56 78 90'
答案 3 :(得分:-1)
如果数字总是8位数,那么除了使用简单的string formatting spec之外,你不需要做任何复杂的事情:
>>> '{}{}{}{} {}{} {}{}'.format(*str(12345678))
1234 56 78
如果您有任何偶数个长度为2或更长的数字,并且您希望将第一个最多4位数字分组,然后在此之后分组后面的数字对,您仍然可以很容易工作:
>>> digits8 = str(12345678)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
1234 56 78
>>> digits6 = str(123456)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
1234 56
>>> digits4 = str(1234)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
1234
>>> digits2 = str(12)
>>> ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
12
作为一项功能:
def special_format(number):
digits = str(int(number))
if len(digits)%2 != 0:
raise ValueError('Number must have an even number of digits.')
return ('{}{}' + ' '.join('{}{}' for _ in range(len(digits)//2-1))).format(*digits)
现在你可以这样做:
>>> special_format(12345678)
'1234 56 78'
>>> special_format(123456)
'1234 56'
>>> special_format(12345678123456)
'1234 56 78 12 34 56'
>>> special_format(12)
'12'