对于带填充的命名元组列表,使用字符串格式进行漂亮打印 (Python)
Pretty print using string format for a namedtuple list with padding (Python)
我有一个包含 entries = namedtuple( 'Entry', ['title', 'x', 'y', 'val'])
的列表 lst
,其中 lst
的每个元素 elm
属于 <class 'generator'>
。
我有一个方法可以像这样打印该列表的元素:
def print_elements_lst(lst_to_print):
return "\n".join("%s %s %s %s" % elm for elm in lst_to_print)
我的问题是我试图在第一个和第二个字符串之间(即 'title'
和 'x'
之间)添加 padding,以便它们之间的空格数将是一致的。
从 here 开始,我像这样计算所需的填充:
pad = max(len(token) for elm in lst_to_print) + 2
但是我在如何在格式化输出中实现它以及 namedtuple
值时遇到问题。
有什么建议吗?
根据 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
我有一个包含 entries = namedtuple( 'Entry', ['title', 'x', 'y', 'val'])
的列表 lst
,其中 lst
的每个元素 elm
属于 <class 'generator'>
。
我有一个方法可以像这样打印该列表的元素:
def print_elements_lst(lst_to_print):
return "\n".join("%s %s %s %s" % elm for elm in lst_to_print)
我的问题是我试图在第一个和第二个字符串之间(即 'title'
和 'x'
之间)添加 padding,以便它们之间的空格数将是一致的。
从 here 开始,我像这样计算所需的填充:
pad = max(len(token) for elm in lst_to_print) + 2
但是我在如何在格式化输出中实现它以及 namedtuple
值时遇到问题。
有什么建议吗?
根据 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