Ich habe eine Liste von Schwimmern. Wenn ich es einfach print
mache, zeigt es sich so:
[9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
Ich könnte verwenden print "%.2f"
, was eine for
Schleife erfordern würde , um die Liste zu durchlaufen, aber dann würde es für komplexere Datenstrukturen nicht funktionieren. Ich hätte gerne so etwas wie (ich mache das komplett nach)
>>> import print_options
>>> print_options.set_float_precision(2)
>>> print [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
[9.0, 0.05, 0.03, 0.01, 0.06, 0.08]
quelle
.replace("'", "")
, um diese Kommas zu entfernen.str(["{0:0.2f}".format(i) for i in a]).replace("'", "")
''
um sich herum. Zum Beispiela=[0.2222, 0.3333]
wird es produzieren['0.22', '0.33']
.' '.join([{0:0.2f}".format(i) for i in a])
Eine dauerhaftere Lösung ist die Unterklasse
float
:Das Problem bei der Unterklasse
float
besteht darin, dass Code unterbrochen wird, der explizit nach dem Typ einer Variablen sucht. Aber soweit ich das beurteilen kann, ist das das einzige Problem. Und ein einfachesx = map(float, x)
macht die Konvertierung zu rückgängigprettyfloat
.Tragischerweise kann man nicht einfach Affenpflaster machen
float.__repr__
, weil esfloat
unveränderlich ist.Wenn Sie keine Unterklasse erstellen möchten
float
, aber nichts dagegen haben, eine Funktion zu definieren,map(f, x)
ist dies viel prägnanter als[f(n) for n in x]
quelle
isinstance
sollte nicht Gleichheit von verwendet werdentype()
. Wenn es richtig gemacht wird, wird eine Unterklasse von float immer noch als float gezählt.Du kannst tun:
quelle
Beachten Sie, dass Sie auch eine Zeichenfolge wie "% .2f" multiplizieren können (Beispiel: "% .2f" * 10).
quelle
" ".join("%.2f" % x for x in yourlist)
da das Trennen von Zeichenfolgen und Interpolationswerten im Format viel schlechter ist als die Verwendung einer hässlichen Python-Sprache.Dadurch werden Rundungsfehler in der Binärdarstellung beim Drucken vermieden, ohne dass eine feste Genauigkeitsbeschränkung eingeführt wird (wie beim Formatieren mit
"%.2f"
):quelle
Python 2:
Python 3:
Ausgabe:
quelle
Die einfachste Option sollte die Verwendung einer Rundungsroutine sein:
Dies erzeugt die Ausgabe:
quelle
Ich glaube, dass Python 3.1 sie standardmäßig besser druckt, ohne dass sich der Code ändert. Dies ist jedoch nutzlos, wenn Sie Erweiterungen verwenden, die nicht für Python 3.1 aktualisiert wurden
quelle
List Comps sind dein Freund.
Versuch es:
quelle
Verwenden Sie den Formatbezeichner% g, um die Anzahl der signifikanten Stellen zu steuern .
Nennen wir Emiles Lösung prettylist2f. Hier ist die modifizierte:
Verwendung:
Wenn Sie Flexibilität bei der Anzahl der signifikanten Stellen wünschen, verwenden Sie stattdessen die Formatierung der F-Zeichenfolge :
quelle
Sie könnten Pandas verwenden.
Hier ist ein Beispiel mit einer Liste:
Wenn Sie ein Diktat d haben und dessen Schlüssel als Zeilen möchten:
Und eine andere Möglichkeit, einem DataFrame ein Diktat zu geben:
quelle
Erstens drucken Elemente in einer Sammlung ihre Repräsentanten. Sie sollten über
__repr__
und lernen__str__
.Dies ist der Unterschied zwischen print repr (1.1) und print 1.1. Verbinden wir alle diese Zeichenfolgen anstelle der Darstellungen:
quelle
Ich bin gerade auf dieses Problem gestoßen, als ich versucht habe, mit pprint eine Liste von Tupeln von Floats auszugeben. Verschachtelte Verständnisse mögen eine schlechte Idee sein, aber ich habe Folgendes getan:
Ich habe zuerst Generatorausdrücke verwendet, aber pprint hat den Generator nur wiederholt ...
quelle
Ab Python 3.6 können Sie F-Strings verwenden:
Sie können Druckparameter verwenden, während der Code gut lesbar bleibt:
quelle
Ich hatte dieses Problem, aber keine der Lösungen hier hat genau das getan , was ich wollte (ich möchte, dass die gedruckte Ausgabe ein gültiger Python-Ausdruck ist). Wie wäre es also damit:
Verwendung:
(Ich weiß, dass .format () die Standardlösung sein soll, aber ich finde dies besser lesbar.)
quelle
Ich stimme dem Kommentar von SilentGhost zu, die for-Schleife ist nicht so schlecht. Sie können erreichen, was Sie wollen mit:
quelle
Der folgende Code funktioniert gut für mich.
quelle