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

在python中打印时的字符串对齐

  •  1
  • Alex  · 技术社区  · 8 年前

    我想输出如下文本:

    Якета            : **************************** 1250.23 €
    Обувки за футбол : ********************** 912.30 €
    Екипи            : ************** 513.45 €
    Топки            : ************ 502.52 €
    T-SHIRTS         : ********* 420.19 €
    

    如何使用占位符将所有冒号缩进到最长字符串的长度-在本例中 Обувки за футбол ?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Community Dai    7 年前

    也许,最优雅的方法是使用 format 方法它允许轻松定义字符串将使用的空间:

    >>> name = 'Якета'
    >>> asterisks = '****************************'
    >>> price = 1250.23
    >>> print '{0:17}: {1} {2} €'.format(name, asterisks, price)
    Якета       : **************************** 1250.23 €
    

    如果需要以编程方式定义填充大小(例如,动态接受较大的字符串而不是硬编码其大小),只需使用 ljust :

    >>> name = 'Якета'
    >>> asterisks = '****************************'
    >>> price = 1250.23
    >>> padding = 17
    >>> print '{0}: {1} {2} €'.format(name.ljust(padding), asterisks, price)
    Якета       : **************************** 1250.23 €
    

    考虑到最大字符串大小以前未知并且脚本必须适应的情况,我们只需要计算最大字符串大小并将其放入 padding :

    >>> names = ['abc', 'defghijklm', 'op', 'q']
    >>> asterisks = '****************************'
    >>> price = 1250.23
    >>> padding = max(map(len, strings))
    >>> for name in names:
            print '{0}: {1} {2} €'.format(name.ljust(padding), asterisks, price)
    abc       : **************************** 1250.23 €
    defghijklm: **************************** 1250.23 €
    op        : **************************** 1250.23 €
    q         : **************************** 1250.23 €
    

    This thread 有一个非常相似的问题。

        2
  •  1
  •   Idos    8 年前

    我会这样做(有点“黑”):

    • 获取最长字符串 longest = len(longest_string) 。如果你在 list 然后 longest = len(max(mylist, key=len)) .
    • 计算所有字符串 spaces = longest - len(str) .
    • 添加 spaces 字符串的每一端都有空格。