11

I have a list with floating point number named a. When I print the 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 format of "5.3f" to get better 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]

3 Answers 3

18
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 the quotes are an issue, you could 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]
Sign up to request clarification or add additional context in comments.

1 Comment

Gorgeous answer! In python3, one could even add a star * before the list's opening bracket [ i.e. print(*['%5.3f' % val for val in l]) which yields a very nice output without quotes ' nor brackets [ ]. Perhaps you would like to add this to your answer?
5

If you need this to work in nested structures, you should look into the pprint module. The following should do what you want, in this context:

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 details 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 quotes, you could do:

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

Comments

0

Lovely code, Edward, but doesn't work for me. Output:

{1: [8, 0.3333333333333333, [0.14285714285714285]]}

A breakpoint on the line after isinstance(float) triggers ONLY if I feed pprint a single float.

Python 3.9 on Windows 10, run under VS Code 1.50.1

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.