這是產生我輸出的最pythonic方式。讓我說明我試圖達到的行爲。 對於我的項目我建立一個函數,它採用不同的參數來打印列中的輸出。 其收到的列表示例。用列表打印Python格式
[('Field', 'Integer', 'Hex'),
('Machine;', 332, '0x14c'),
('NumberOfSections;', 9, '0x9'),
('Time Date Stamp;', 4, '0x4'),
('PointerToSymbolTable;', 126976, '0x1f000')
**項目的大小可以不同,現在每個元組(只有3項,可以是4另一個列表或任意數量的**
輸出應該是這樣的
Field Integer Hex
-------------------------------------------------------------------------------
Machine; 332 0x14c
NumberOfSections; 9 0x9
Time Date Stamp; 4 0x4
PointerToSymbolTable; 126976 0x1f000
用於工作目的,我創建了僅包含頭字段列表: 這不是必要的,但它使人們更容易些艱難的東西出來
Header field is ['Field', 'Integer', 'Hex']
列表中的第一個元組聲明所謂的「Header字段」,如列表示例所示。 對於這種情況,只有3個項目,但這可能會不時有所不同。所以我試着用下面的公式計算物品的尺寸:
length_container_header = len(container[0])
這個變量可以用來正確地建立輸出。 構建標題「打印」我會構建這樣的東西。
print("{:21} {:7} {:7}".format(header_field[0], header_field[1], header_field[2]))
現在這是一個應該如何使用的手冊。正如您注意到標題字段「字段」短於列表中的 PointerToSymbolTable。我寫此函數來確定在列表中
container_lenght_list = []
local_l = 0
for field in range(0, lenght_container_body):
for item in container[1:]:
if len(str(item[field])) > local_l:
local_l = len(str(item[field]))
else:
continue
container_lenght_list.append(str(local_l))
local_l = 0
每個位置上的最長的項目可生產沿着這個場合,例如[21,7,7]行的列表。 創建格式字符串可以做很簡單,
formatstring = ""
for line in lst:
formatstring+= "{:" + str(line) +"}"
將會產生字符串:
{:21}{:7}{:7}
這是部分是一遇到麻煩,我如何能產生格式字符串的最後一部分? 我在格式()函數中嘗試了一個嵌套的for循環,但我最終發現了各種錯誤。我認爲這可以通過 for循環完成,我只是無法弄清楚。如果有人能夠將我推向正確的方向打印標題,我將非常感激。一旦我想出如何打印標題,我幾乎可以弄清楚其餘部分。我希望我解釋的不夠好
隨着親切的問候,
http://www.programmingforums.org/post195293.html看看底部有一定的瞭解。你可以使用你的格式作爲例子中的'row'變量。然後遍歷列表來獲取每行,這將是'args'。 – 2014-10-20 17:24:09
「格式字符串的最後部分」是什麼意思?你能舉一個簡單的例子嗎? – goncalopp 2014-10-20 17:25:38
我認爲他不知道如何將他的列表值應用於格式。但是,我不完全確定。那裏有很多話。 – 2014-10-20 17:26:06