2011-09-08 18 views
7

Ho una lista con numero in virgola mobile denominata a. Quando stampo la lista con print a. Ottengo il risultato come segue.Controllo di un formato di stampa durante la stampa di un elenco in Python

[8.364, 0.37, 0.09300000000000003, 7.084999999999999, 0.469, 0.303, 9.469999999999999, 0.28600000000000003, 0.2290000000 000001, 9.414, 0.9860000000000001, 0.534, 2.1530000000000005]

Posso dire che la stampante lista per stampare il formato di "5.3f" per ottenere un risultato migliore?

[8.364, 0.37, 0.093, 7.084, 0.469, 0.303, 9.469, 0.286, 0.229, 9.414, 0.986, 0.534, 2.153]

risposta

15
In [4]: print ['%5.3f' % val for val in l] 
['8.364', '0.370', '0.093', '7.085', '0.469', '0.303', '9.470', '0.286', '0.229', '1.000', '9.414', '0.986', '0.534', '2.153'] 

dove l è la vostra lista.

edit: Se le virgolette sono un problema, è possibile utilizzare

In [5]: print '[' + ', '.join('%5.3f' % v for v in l) + ']' 
[8.364, 0.370, 0.093, 7.085, 0.469, 0.303, 9.470, 0.286, 0.229, 1.000, 9.414, 0.986, 0.534, 2.153] 
5

Se avete bisogno di questo per lavorare in strutture nidificate, si dovrebbe esaminare il modulo pprint. Il seguente dovrebbe fare quello che vuoi, in questo contesto:

from pprint import PrettyPrinter 
class MyPrettyPrinter(PrettyPrinter): 
    def format(self, object, context, maxlevels, level): 
     if isinstance(object, float): 
      return ('%.2f' % object), True, False 
     else: 
      return PrettyPrinter.format(self, object, context, 
             maxlevels, level) 
print MyPrettyPrinter().pprint({1: [8, 1./3, [1./7]]}) 
# displays {1: [8, 0.33, [0.14]]} 

Per ulteriori dettagli su pprint, vedi: http://docs.python.org/library/pprint.html

Se è solo per una semplice lista, quindi la soluzione di Aix è buona. Oppure, se non ti piacciono le citazioni aggiuntive, puoi fare:

print '[%s]' % ', '.join('%.3f' % val for val in list) 
Problemi correlati