/ / Formatierung von Zahlen in Python zur Anzeige - Python, Formatierung, Zahlen, Format

Formatieren von Zahlen in Python für die Anzeige - Python, Formatierung, Zahlen, Format

Ich versuche, eine längere Ganzzahl lesbarer auszugeben. Wie kann ich es nach einer bestimmten Anzahl von Ziffern als Zeichenfolge mit Leerzeichen formatieren?

Zum Beispiel möchte ich 12345678 als ausgegeben werden 1234 56 78

Antworten:

5 für die Antwort № 1

Eine Möglichkeit ist die Verwendung re Modul, passen Sie die Zahl mit regex an und formatieren Sie sie neu:

import re
re.sub(r"(d{4})(d{2})(d{2})", r"1 2 3", "12345678")
# "1234 56 78"

Oder zur besseren Lesbarkeit sollten Sie es mit einem Tausendertrennzeichen formatieren:

"{:,d}".format(12345678)
# "12,345,678"

1 für die Antwort № 2

Sie können dies auch mit einer Kombination von tun itertools und 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"

1 für die Antwort № 3

Du könntest so etwas tun:

>>> 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 für die Antwort № 4

Wenn die Nummer immer 8-stellig ist, müssen Sie nichts komplizierter machen als eine einfache String-Formatierungsspezifikation:

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

Wenn Sie beispielsweise eine beliebige Anzahl von Ziffern haben könntenvon Länge 2 oder größer, und Sie möchten, dass die ersten bis zu 4 Ziffern und dann die folgenden Ziffernpaare gruppiert werden, können Sie dies trotzdem ganz einfach machen:

>>> 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

Als eine Funktion:

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)

Jetzt können Sie das tun:

>>> special_format(12345678)
"1234 56 78"
>>> special_format(123456)
"1234 56"
>>> special_format(12345678123456)
"1234 56 78 12 34 56"
>>> special_format(12)
"12"