使用字符串格式的漂亮打印用于带填充的namedtuple列表(Python)

时间:2016-11-19 07:43:47

标签: python python-3.x string-formatting namedtuple

我有一个lst的{​​{1}}列表,其中entries = namedtuple( 'Entry', ['title', 'x', 'y', 'val'])的每个元素elm都是lst

我有一个打印该列表元素的方法,如下所示:

<class 'generator'>

我的问题是我尝试在第一个和第二个字符串之间添加填充(即def print_elements_lst(lst_to_print): return "\n".join("%s %s %s %s" % elm for elm in lst_to_print) 'title'之间),这样就会有一致的数字它们之间的空白区域。

here开始,我计算所需的填充:

'x'

但我遇到了如何在格式化输出中实现此问题以及pad = max(len(token) for elm in lst_to_print) + 2 值的问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

根据pad值更改格式字符串。

>>> pad = 20
>>> fmt = "%-{}s %s %s %s".format(pad)
>>> fmt  # `-20s`: left align (width = 20), without `-` -> right align
'%-20s %s %s %s'
>>> fmt % ('hello', 1, 2, 3)
'hello                1 2 3'
>>> def print_elements_lst(lst_to_print):
...     pad = max(len(elm.title) for elm in lst_to_print) + 2
...     fmt = "%-{}s %s %s %s".format(pad)  # Specify width depending on `pad`
...     return "\n".join(fmt % elm for elm in lst_to_print)
...
>>> Entry = namedtuple( 'Entry', ['title', 'x', 'y', 'val'])
>>> entries = [
...     Entry('Hello world', 1, 2, 10),
...     Entry('Python', 20, 2, 10),
... ]
>>> print(print_elements_lst(entries))
Hello world   1 2 10
Python        20 2 10