2014-09-10 14 views
7

Sto provando a generare una stringa che comporta un galleggiante occasionale con zeri finali. Si tratta di una MWE della stringa di testo e il mio tentativo di rimuoverli con {0:g}:.format() restituisce ValueError quando si utilizza {0: g} per rimuovere gli zero finali

xn, cod = 'r', 'abc' 
ccl = [546.3500, 6785.35416] 
ect = [12.350, 13.643241] 

text = '${}_{{t}} = {0:g} \pm {0:g}\;{}$'.format(xn, ccl[0], ect[0], cod) 
print text 

Purtroppo questo ritorna:

ValueError: cannot switch from automatic field numbering to manual field specification 

Questa domanda Using .format() to format a list with field width arguments riportato sulla stessa questione, ma io non riesco a capire come applicare la risposta data lì a questo problema.

+1

Non sono sicuro di aver capito cosa si sta cercando di ottenere con 'g'. Gli zeri finali in un valore letterale float non significano nulla, quindi '546.3500' è esattamente lo stesso numero di' 546.35' (e verranno stampati entrambi allo stesso modo, sia che lo si voglia o no). – Blckknght

+0

@Blckknght prova 'print '{0} {0: g}'. Format (50.0)'. Non stampano lo stesso. – Gabriel

+0

Mentre leggevo di nuovo la domanda, forse volevi '{: 0g}' piuttosto che '{0: g}'? Non sono sicuro che il primo sia molto utile, ma è valido. – Blckknght

risposta

14

{} utilizza la numerazione automatica dei campi. {0:g} utilizza la numerazione manuale dei campi.

Non mescolare i due. Se si intende utilizzare la numerazione manuale dei campi, utilizzarla ovunque:

text = '${0}_{{t}} = {1:g} \pm {2:g}\;{3}$'.format(xn, ccl[0], ect[0], cod) 
+0

Ottima risposta unubtu, correzione minore, forse intendevi:' $ {0} _ {{t}} = {1: g} \ pm {2: g} \; {3} $ '? – Gabriel

+1

Grazie Gabriel. Non ero sicuro di quali numeri di campo usare, poiché il codice originale usava' {0: g} 'due volte e eppure c'erano quattro argu menti ... – unutbu