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

String alignment when printing in python

我想像这样输出文本:

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

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

我会做这样的事情(有点"hackish"):

  • 得到最长的字符串longest = len(longest_string)。如果你的字符串在 list 中,那么 longest = len(max(mylist, key=len)).
  • 计算所有字符串 spaces = longest - len(str)
  • 在字符串的每一端添加 spaces 个空格。

可能,最优雅的方法是使用format方法。它允许轻松定义 space 字符串将使用:

>>> 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 有一个非常相似的问题。