代码之家  ›  专栏  ›  技术社区  ›  foobarfuzzbizz

如何右对齐数字数据?

  •  34
  • foobarfuzzbizz  · 技术社区  · 15 年前

    我有一些数据显示为3列格式,格式为:

    key: value key: <tab> key: value <tab> key: value .

    下面是一个例子:

    p: 1    sl: 10  afy: 4
    q: 12   lg: 10  kla: 3
    r: 0    kl: 10  klw: 3
    s: 67   vw: 9   jes: 3
    t: 16   uw: 9   skw: 3
    u: 47   ug: 9   mjl: 3
    v: 37   mj: 8   lza: 3
    w: 119  fv: 8   fxg: 3
    x: 16   fl: 8   aew: 3
    

    不过,我想知道数字是否正确对齐,例如:

    a:   1
    b:  12
    c: 123
    

    我怎样才能在python中做到这一点?

    这是我现有的打印代码:

    print(str(chr(i+ord('a'))) + ": " + str(singleArray[i]) + "\t" +
        str(doubleArray[i][0]) + ": " + str(doubleArray[i][1]) + "\t" +
        str(tripleArray[i][0]) + ": " + str(tripleArray[i][1]))
    
    5 回复  |  直到 7 年前
        1
  •  34
  •   John Mee    12 年前

    在python 2.5中,使用rjust(字符串)。另外,试着习惯 string formatting 而不仅仅是连接字符串。下面是Rjust和字符串格式的简单示例:

    width = 10
    str_number = str(ord('a'))
    print 'a%s' % (str_number.rjust(width))
    
        2
  •  74
  •   Pat    12 年前

    在python 2.6+中(这是3中的标准方法),字符串格式的“首选”方法是使用string.format()(可以找到完整的文档 here ) 正确的理由可以用

    "a string {0:>5}".format(foo)
    

    不过,这需要5个位置

    "a string {0:>{1}}".format(foo, width)
    

    也是有效的,将使用传递给.format()的值width。

        3
  •  25
  •   Nadia Alramli    15 年前

    使用python字符串格式: '%widths' 其中宽度为整数

    >>> '%10s' % 10
    '        10'
    >>> '%10s' % 100000
    '    100000'
    
        4
  •  3
  •   Torkel Bjørnson-Langen    8 年前

    在python 3.6中,可以使用 Literal String Interpolation 更少 冗长,使用起来可能更直观:

    width = 5
    number = 123
    print (f'{number:>{width}}')
    

    或者只是:

    number = 123
    print (f'{number:>5}')
    

    它利用了 str.format() 语法。

    我想/希望这是将来的首选方式。

        5
  •  2
  •   Jochen Ritzel    15 年前

    如果知道数字的上限,可以使用 "%<lenght>d" % n . 考虑到所有这些计算都已完成,并且在(char,num)列表中:

    mapping = ((chr(i+ord('a')), singleArray[i]), 
               (doubleArray[i][0],doubleArray[i][1]), 
               (tripleArray[i][0],tripleArray[i][1])
               )
    for row in mapping:
       print "%s: %3d" % row