如何将格式化打印应用于python列表?

时间:2016-01-19 10:53:06

标签: python list printing format

假设我在Python中有一个浮点数列表。

x = [1.2, 3.4, 5.7, 7.8]

要打印出这个数组,我们可以使用以下命令:

print '{0}'.format(x)

以上命令的输出如下:

[1.2, 3.4, 5.7, 7.8]

但是,有没有办法以格式化的方式打印出列表的内容?例如,我想使用如下四个小数点:

[ 1.2000,  3.4000,  5.7000,  7.8000]

要做到这一点,我可能会使用以下命令,但它显然太乱了,我认为可能有一些简单的方法可以做到这一点。

print '[',
for i in range(0, len(x) - 1):
  print '{0:5.4f}, '.format(x[i]),
print '{0:5.4f}]'.format(x[len(x) - 1])

有人可以就此提出一些建议吗?

3 个答案:

答案 0 :(得分:3)

使用列表理解:

>>> x = [1.2, 3.4, 5.7, 7.8]
>>> x1 = ['{0:5.4f}'.format(i) for i in x]
>>> x1
['1.2000', '3.4000', '5.7000', '7.8000']

列表理解是一个看起来像这样的扁平化版本:

>>> x1 = []
>>> for i in x:
...     x1.append('{0:5.4f}'.format(i))
... 
>>> x1
['1.2000', '3.4000', '5.7000', '7.8000']

答案 1 :(得分:2)

您可以使用map

print map('{0:5.4f}'.format,x)

如果您使用的是python 3,请执行:

print list(map('{0:5.4f}'.format,x))

答案 2 :(得分:1)

format的替代方案,您也可以使用%

l = [1.2, 3.4, 5.7, 7.8]

In [182]: list(map(lambda x: '%.4f' % x, l))
Out[182]: ['1.2000', '3.4000', '5.7000', '7.8000']

使用时间,您可以看到%format输出快一点:

In [189]: %timeit list(map(lambda x: '%.4f' % x, l))
100000 loops, best of 3: 3.96 us per loop

In [190]: %timeit list(map('{0:5.4f}'.format,l))
100000 loops, best of 3: 4.69 us per loop

In [192]: %timeit ['{0:5.4f}'.format(i) for i in x]
100000 loops, best of 3: 12.4 us per loop