漂亮地打印浮点数列表的列表?

3 投票
4 回答
6239 浏览
提问于 2025-04-15 18:23

基本上,我需要把一系列的温度读数放进一个文本文件里。这是一个用空格分隔的元素列表,每一行代表某个东西(我也不太清楚,反正就是被强行放进一个Fortran模型里,真让人头疼)。我大致上是在我们小组这边处理这个事情,负责提取这些温度读数并把它们放进文本文件。

简单来说,我有一个像这样的列表(但元素要多得多):

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

以前我们只是把这些数据直接放进文件里,但不幸的是,有些人总是喜欢直接查看这个文本文件,挑选某些列并修改一些东西(为了测试……我也不太清楚……)。但是他们总是抱怨列对不齐,他们希望上面的列表能像这样打印出来:

    1.343     348.222     484844.333
12349.000002   -2.433333

这样那些漂亮的小数就能对齐了。有没有简单的方法可以做到这一点?

4 个回答

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

2

你可以这样进行右侧填充:

str = '%-10f' % val

如果想要左侧填充,可以这样做:

set = '%10f' % val

或者你也可以结合使用填充,并将小数点后精确到4位:

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

撰写回答