Controlling print format when printing a list in Python

I have a floating point list named a . When I print a list with print a . I get the result as follows.

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

Can I tell the list printer to print the "5.3f" format to get the best result?

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

+7
source share
2 answers
 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'] 

where l is your list.

edit: If quotation marks are a problem, you can use

 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] 
+15
source

If you need this to work in nested structures, you should study the pprint module. In this context, do the following:

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

For more on pprint see: http://docs.python.org/library/pprint.html

If it's just for a flat list, then aix's solution is good. Or, if you don't like the extra quotation marks, you can do:

 print '[%s]' % ', '.join('%.3f' % val for val in list) 
+5
source

All Articles