Formatierung der Dezimalausrichtung in Python
Diesesollte sei einfach.
Hier ist mein Array (eher eine Methode zum Generieren repräsentativer Testarrays):
<code>>>> ri = numpy.random.randint >>> ri2 = lambda x: ''.join(ri(0,9,x).astype('S')) >>> a = array([float(ri2(x)+ '.' + ri2(y)) for x,y in ri(1,10,(10,2))]) >>> a array([ 7.99914000e+01, 2.08000000e+01, 3.94000000e+02, 4.66100000e+03, 5.00000000e+00, 1.72575100e+03, 3.91500000e+02, 1.90610000e+04, 1.16247000e+04, 3.53920000e+02]) </code>
Ich möchte eine Liste von Zeichenfolgen, in die '\ n'.join (list_o_strings) drucken würde:
<code> 79.9914 20.8 394.0 4661.0 5.0 1725.751 391.5 19061.0 11624.7 353.92 </code>
Ich möchte ein Leerzeichen nach links setzenund das richtige (aber nicht mehr als nötig).
Ich möchte eine Null nach dem Komma, wenn das alles ist, was nach dem Komma steht.
Ich möchte keine wissenschaftliche Notation.
..und ich möchte keine signifikanten Ziffern verlieren. (in 353.98000000000002 ist die 2 nicht signifikant)
Ja, es ist schön zu wollen ..
Python 2.5%g, %fx.x
usw. verwirren mich entweder oder können es nicht. Ich habe es nicht versuchtimport decimal
noch. Ich kann das nicht sehenNumPy tut es auch (obwohl diearray.__str__
undarray.__repr__
sind dezimal ausgerichtet (geben aber manchmal wissenschaftliche Ergebnisse zurück).
Oh, und Geschwindigkeit zählt. Ich habe es hier mit großen Arrays zu tun.
Meine aktuellen Lösungsansätze sind:
um (a) zu stren und NumPys Klammern zu entfernenum (e) jedes Element im Array zu markieren und zu teilen ('.'), dann aufzufüllen und zu rekonstruierenzu a.astype ('S' + str (i)), wobei i das Maximum ist (len (str (a))), dann padEs scheint, als sollte es eine Standardlösung geben ... (aber nicht erforderlich)
Top Vorschlag scheitert mit wanndtype
ist float64:
<code>>>> a array([ 5.50056103e+02, 6.77383566e+03, 6.01001513e+05, 3.55425142e+08, 7.07254875e+05, 8.83174744e+02, 8.22320510e+01, 4.25076609e+08, 6.28662635e+07, 1.56503068e+02]) >>> ut0 = re.compile(r'(\d)0+$') >>> thelist = [ut0.sub(r'\1', "%12f" % x) for x in a] >>> print '\n'.join(thelist) 550.056103 6773.835663 601001.513 355425141.8471 707254.875038 883.174744 82.232051 425076608.7676 62866263.55 156.503068 </code>