【问题标题】:How to align positive and negative values along the decimal point in python如何在python中沿小数点对齐正负值
【发布时间】:2015-03-11 01:38:52
【问题描述】:

我想将一堆正负值写入文本文件,如下所示

1      12.203026     2.291063     -0.061603
1      -0.736147     1.353548     -1.347932
6       0.728048     1.348907      0.247566
6      -0.728048     1.348907    -10.247565
1      10.736147     1.353547      1.347932
1      -1.203026    12.291063      0.061604
6      11.583889     0.179143    -10.258947

当我写它时,它应该与上面的小数点对齐。我使用以下 f.write() 命令编写的代码如下所示。

 f.write('%s    %2.6f   %2.6f   %2.6f\n' % (a, x, y, z ))

输出

1      12.203026    2.291063    -0.061603
1      -0.736147    1.353548    -1.347932
6      0.728048     1.348907    0.247566
6      -0.728048    1.348907    -10.247565
1      10.736147    1.353547    1.347932
1      -1.203026    12.291063    0.061604
6      11.583889    0.179143    -10.258947

【问题讨论】:

标签: python python-2.7


【解决方案1】:

格式中的第一个数字是字符总数,而不是小数点前的数字。当该数字太小时,它会通过删除所有填充来进行补偿。要得到你想要的,你需要使用%10.6f,而不是%2.6f- 为 1,初始位数为 2,小数点为 1,小数点后为 6 位 - 1+2+1+6=10。

【讨论】:

    【解决方案2】:

    假设我有:

    >>> li=[['1', 12.203026, 2.291063, -0.061603], ['1', -0.736147, 1.353548, -1.347932], ['6', 0.728048, 1.348907, 0.247566], ['6', -0.728048, 1.348907, -10.247565], ['1', 10.736147, 1.353547, 1.347932], ['1', -1.203026, 12.291063, 0.061604], ['6', 11.583889, 0.179143, -10.258947]]
    

    您可以分两步右对齐到固定的字段宽度:

    for a,x,y,z in li:
        x1, y1, z1=['{:2.6f}'.format(e) for e in (x,y,z)]
        print '{} {:>13} {:>13} {:>13}'.format(a, x1, y1, z1 )
    

    打印:

    1     12.203026      2.291063     -0.061603
    1     -0.736147      1.353548     -1.347932
    6      0.728048      1.348907      0.247566
    6     -0.728048      1.348907    -10.247565
    1     10.736147      1.353547      1.347932
    1     -1.203026     12.291063      0.061604
    6     11.583889      0.179143    -10.258947
    

    如果你想在一个地方指定宽度和精度,你可以这样做:

    '{} {:{w}.{p}f} {:{w}.{p}f} {:{w}.{p}f}'.format(a, x, y, z, w=13, p=6 )
    

    【讨论】:

    • 感谢您的回答。无论如何,我都有浮动变量中的所有值。在我的程序中,我将 f.write() 包含在 for 循环中。是否可以在不再次读取的情况下对齐该 for 循环中的数字?
    • 关键部分是包含.format 的两行代码。只需将它们放在您的for 循环中即可。将print 替换为f.write 并将\n 添加到末尾
    • 非常感谢,我会努力的。我是 python 新手
    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 2010-11-24
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多