2017-07-26 87 views
1

我想輸出更可讀的方式更長的整數。如何在一定數量的數字後將其格式化爲空格的字符串?在python格式化數字顯示

例如,我想12345678以輸出爲1234 56 78

+0

如何爲'1234 56 78''比'12345678'更可讀嗎? –

+0

您的意思是12 34 56 78? –

回答

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' 
+0

不知道'1234567'的OP預期輸出是什麼,但是這個返回'1234567'而不是'1234 56 7'。 –

+0

@AshwiniChaudhary正則表達式選項是相當有限的,我不能提出一個通用的,而不必事先知道數字和格式要求的數量。所以我想這只是目前的一個選擇。 – Psidom

1

您也可以使用itertoolsstr.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' 
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' 
-1

如果號碼總是要8位數字,你不需要做任何事情複雜得多,使用簡單string formatting spec

>>> '{}{}{}{} {}{} {}{}'.format(*str(12345678)) 
1234 56 78 

如果您可以擁有任意偶數的長度爲2或更大的數字,並且想要將第一個最多4位數字分組,然後使用後面的數字pa IRS後分組,你仍然可以使這項工作很容易:

>>> 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' 
+0

這個答案完全符合OP以簡單的方式提出的要求。對於爲什麼有人會倒下它,我感到很困惑。 –