漂亮地打印一个包含浮点数的列表?

3

基本上,我需要将一系列的温度读数转储到一个文本文件中。这是一个以空格分隔的元素列表,其中每行代表某个东西(我不知道,它只是被强制插入到Fortran模型中,发抖)。从我们小组的角度来看,我更多地处理的是提取这些温度读数并将它们转储到文本文件中。

一个快速的例子就像这样(但有很多更多的元素):

temperature_readings = [ [1.343, 348.222, 484844.3333], [12349.000002, -2.43333]]

在过去,我们只是将这个内容倒入文件中。不幸的是,有些人有查看文本文件并挑选某些列以及更改一些东西(用于测试……我不是很清楚)的恼人习惯。但是他们总是抱怨列没有对齐,他们希望上面的列表像这样打印出来:
    1.343     348.222     484844.333
12349.000002   -2.433333

那么这些美妙的小数点是如何对齐的呢?有没有简单的方法可以做到这一点?
4个回答

2
你可以这样进行右侧填充:
str = '%-10f' % val

向左填充:

set = '%10f' % val

或者结合使用数字键盘并将精度设置为四位小数:

str = '%-10.4f' % val

:

import sys
rows = [[1.343, 348.222, 484844.3333], [12349.000002, -2.43333]]
for row in rows:
  for val in row:
    sys.stdout.write('%20f' % val)
  sys.stdout.write("\n")

        1.343000          348.222000       484844.333300
    12349.000002           -2.433330

唯一的问题是,% 运算符已经被弃用。 - Swiss
@swiss,%(取模运算符)是最便携的。新的str.format在大多数安装中不可用。 - jspcal
如果没有使用str.format的可能性,那么%就是正确的选择。但是尽可能使用str.format。 - Swiss

2

%字符串格式化操作符现在已经被弃用。

你可以使用str.format在Python中进行漂亮打印。

像这样的代码可能适合你:

for set in temperature_readings:
    for temp in set:
        print "{0:10.4f}\t".format(temp),
    print

以下代码的输出内容为:

    1.3430        348.2220      484844.3333
12349.0000         -2.4333

您可以在此处阅读更多内容:http://docs.python.org/tutorial/inputoutput.html#fancier-output-formatting


1
请注意,"%s已经过时,只有".format()"更好"的意思;"% "格式化不会消失。 - Beni Cherniavsky-Paskin
sys.stdout.write?如果你想坚持使用Python 3,为什么不用print或print()呢?你的代码看起来像是用Python语法编写的Java代码。 - Max Shawabkeh
习惯使然。没有真正的理由不使用print。 - Swiss

1
如果您还想显示固定数量的小数位(如果数字确实是温度读数,则这可能是有意义的),那么像这样的代码可以产生相当不错的输出:
for line in temperature_readings:
   for value in line:
      print '%10.2f' % value,
   print

输出:

      1.34     348.22  484844.33
  12349.00      -2.43

1
在Python 2.*中,
for sublist in temperature_readings:
    for item in sublist:
        print '%15.6f' % item,
    print

emits

       1.343000      348.222000   484844.333300
   12349.000002       -2.433330

以您的示例为基础,当然可以根据您的喜好调整长度和小数位数!


@Beni,没错,我复制粘贴的行数比应该有的少了一行,让我编辑一下来修复,谢谢。 - Alex Martelli

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