Управление форматом печати при печати списка в Python - PullRequest
10 голосов
/ 08 сентября 2011

У меня есть список с числом с плавающей запятой с именем a.Когда я печатаю список с print a.Я получаю результат следующим образом.

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

Могу ли я сказать принтеру списка, чтобы он напечатал формат «5.3f», чтобы получить лучший результат?*

Ответы [ 2 ]

18 голосов
/ 08 сентября 2011
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']

, где l - ваш список.

edit: Если кавычки являются проблемой, вы можете использовать

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 голосов
/ 08 сентября 2011

Если вам это нужно для работы во вложенных структурах, вам следует заглянуть в модуль pprint.Следующее должно делать то, что вы хотите, в этом контексте:

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

Для получения дополнительной информации о pprint см .: http://docs.python.org/library/pprint.html

Если это просто для плоского списка, тоРешение это хорошо.Или, если вам не нравятся дополнительные кавычки, вы можете сделать:

print '[%s]' % ', '.join('%.3f' % val for val in list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...