漂亮打印浮动列表列表?

时间:2010-01-23 20:45:51

标签: python

基本上我必须将一系列温度读数转储到文本文件中。这是一个以空格分隔的元素列表,其中每一行代表一些东西(我不知道,它只是强制进入fortran模型, shudder )。我或多或少地从我们的小组那边处理它,它正在提取那些温度读数并将它们转储到文本文件中。

基本上一个简单的例子是我有一个这样的列表(但有更多的元素):

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

过去我们只是把它放到一个文件中,不幸的是有些人有这种恼人的诀窍想要直接看文本文件,挑选某些列并改变一些东西(用于测试..我不喜欢真的知道..)。但是他们总是抱怨列没有正确排列,他们几乎就像上面列出的那样:

    1.343     348.222     484844.333
12349.000002   -2.433333

所以这些精彩的小数排列。有一个简单的方法吗?

5 个答案:

答案 0 :(得分:3)

你可以像这样右键:

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

答案 1 :(得分: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 :(得分: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

答案 3 :(得分:1)

在Python 2。*中,

for sublist in temperature_readings:
    for item in sublist:
        print '%15.6f' % item,
    print

发射

       1.343000      348.222000   484844.333300
   12349.000002       -2.433330

为您的例子。当然,可以根据需要调整长度和小数位数!

答案 4 :(得分:-1)

结帐Python pprint

  

pprint模块提供了一种“漂亮打印”任意Python数据结构的功能,该形式可以用作解释器的输入。

     

[...]

     

此示例演示了pprint()函数及其参数的几种用法。

>>> import pprint
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> stuff = ['a' * 10, tup, ['a' * 30, 'b' * 30], ['c' * 20, 'd' * 20]]
>>> pprint.pprint(stuff)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights', ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, depth=3)
['aaaaaaaaaa',
 ('spam', ('eggs', (...))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, width=60)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights',
     ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
  'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]

否则根据字符长度找出最长的数字,并使用Python的string substitution formatting options来制作相同长度的所有内容。或使用制表符作为分隔符。很多选择!