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

11

我有一个名为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"以获得更好的输出结果?

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

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]

1
漂亮的回答!在Python3中,甚至可以在列表的开括号[之前添加一个星号*,即print(*['%5.3f' % val for val in l]),这将产生非常好的输出,没有引号'或方括号[ ]。也许您想将此内容添加到您的答案中? - Gael Lorieul

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)

0
可爱的代码,Edward,但对我不起作用。输出:
{1:[8,0.3333333333333333,[0.14285714285714285]]}
如果我只提供一个浮点数给pprint,那么在isinstance(float)后面的断点才会触发。
Python 3.9在Windows 10上运行,在VS Code 1.50.1下运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接