2015-09-02 120 views
2

我有家庭作業,我必須拿一個包含元組的列表並打印出一張表。例如,列表可能是這樣的:從Python中的元組列表中創建一個表3

data = [('Item1', a1, b1, c1, d1, e1, f1), 
     ('Item2', a2, b2, c2, d2, e2, f2), 
     ('Item3', a3, b3, c3, d3, e3, f3)] 

我會打印出這一點:

  Item1 Item2 Item3 
DataA:  a1  a2  a3 
DataB:  b1  b2  b3 
DataC:  c1  c2  c3 
DataD:  d1  d2  d3 
DataE:  e1  e2  e3 
DataF:  f1  f2  f3 

我已經初始化列表:

data_headings = ['','DataA:','DataB','DataC:','DataD:','DataE':,'DataF:'] 

我的老師也給我們可以選擇使用他創建的功能:

display_with_padding(str): 
    print("{0: <15}".format(s), end = '') 

如何做到這一點的指導將非常感謝。我過去一直在玩這個遊戲,但我仍然無法解決這個問題。

+0

我回答了您的問題嗎? –

回答

0

訣竅是按照某種順序迭代表中的每個元素。先行或列先行?

因爲要逐行打印,所以必須先遍歷行,然後在每列中查找相應的值。注意data是列的列表,而第二個列表爲每一行提供一個標籤。我在下面的演示中將它重命名爲row_labels

def display_with_padding(s): 
    print("{0: <15}".format(s), end = '') 

data = [('Item1', 'a1', 'b1', 'c1', 'd1', 'e1', 'f1'), 
     ('Item2', 'a2', 'b2', 'c2', 'd2', 'e2', 'f2'), 
     ('Item3', 'a3', 'b3', 'c3', 'd3', 'e3', 'f3')] 

row_labels = ['', 'DataA:', 'DataB:', 'DataC:', 'DataD:', 'DataE:', 'DataF:'] 

for row_index, label in enumerate(row_labels): 
    display_with_padding(label) 
    for column in data: 
    display_with_padding(column[row_index]) 
    print() 

注意使用enumerate()獲得指數和價值的同時,我們遍歷row_labels

哦,我在你發佈的代碼中修復了一些bug。函數定義存在一些問題(缺少def和錯誤的參數名稱)以及行標籤中的語法錯誤。我也重命名了行標籤。

1
def display_with_padding(s): 
    print("{0: <15}".format(s), end='') 

def print_row(iterable): 
    [display_with_padding(x) for x in iterable] 
    print() 

def main(): 

    data = [ 
     ('Item1', 'a1', 'b1', 'c1', 'd1', 'e1', 'f1'), 
     ('Item2', 'a2', 'b2', 'c2', 'd2', 'e2', 'f2'), 
     ('Item3', 'a3', 'b3', 'c3', 'd3', 'e3', 'f3') 
    ] 

    col_headers = [''] + [x[0] for x in data] # Build headers 
    print_row(col_headers) 


    labels = ['DataA:','DataB:','DataC:','DataD:','DataE:','DataF:'] 

    # Build each row 
    rows = [] 
    for row_num, label in enumerate(labels, start=1): 
     content = [label] 
     for col in data: 
      content.append(col[row_num]) 
     rows.append(content) 

    for row in rows: 
     print_row(row) 


if __name__ == '__main__': 
    main() 
相關問題