2016-11-19 119 views
2

我有一個列表的entries = namedtuple('Entry', ['title', 'x', 'y', 'val'])lst,其中每個元素的lstelm<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'之間),以便它們之間會有一致的空白空間。

here,我計算所需填充像這樣:

pad = max(len(token) for elm in lst_to_print) + 2 

,但我有關於如何與namedtuple值一起實現這個在格式化輸出的問題。

有什麼建議嗎?

回答

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 
+0

美麗。 Python可以很好;) – Yannis