在Python中控制打印列表的格式

11 投票
3 回答
9465 浏览
提问于 2025-04-17 01:48

我有一个包含浮点数的列表,叫做 a。当我用 print a 打印这个列表时,结果是这样的:

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

我能否让列表的打印格式变成 "5.3f",这样看起来会更好一些?

[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 个回答

0

很棒的代码,Edward,但对我来说不管用。输出结果是:

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

在isinstance(float)那行后设置的断点,只有当我给pprint一个单独的浮点数时才会触发。

我在Windows 10上用Python 3.9,VS Code版本是1.50.1。

5

如果你需要在嵌套结构中使用这个功能,可以看看 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

如果你只是想处理一个简单的列表,那么aix的解决方案就很好。或者如果你不喜欢多余的引号,你可以这样做:

print '[%s]' % ', '.join('%.3f' % val for val in list)
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']

这里的 l 是你要用的列表。

补充:如果引号有问题,你可以使用

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]

撰写回答