鍍金池/ 問答/Python/ 如何解決文本對(duì)齊

如何解決文本對(duì)齊

大家好,我是python學(xué)習(xí)新手,我在一個(gè)練習(xí)題目中遇到問題.
題目的要求是把列表打印輸出并對(duì)齊。
輸入數(shù)據(jù):

tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]

要求的輸出數(shù)據(jù)(第一行右對(duì)齊,其他左對(duì)齊):

  apples Alice dogs
 oranges Bob   cats
cherries Carol moose
  banana David goose

以下是我的代碼

"""下面是代碼正文"""
tableData = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]

def printTable(tableData):
    # 下面是為了求每個(gè)內(nèi)層列表的最長字符串的長度
    colWidths = [0] * len(tableData)
    for i in range(len(colWidths)):
        colWidths[i] = len(sorted(tableData[i], key=(lambda x: len(x)))[-1])
    
    for x in range(len(tableData[0])):
        for y in range(len(tableData)):
            print(tableData[y][x].rjust(colWidths[y]), end=' ')
        print('')    # 換行

printTable(tableData)

輸出結(jié)果是(全部右對(duì)齊了):

  apples Alice  dogs 
 oranges   Bob  cats 
cherries Carol moose 
  banana David goose 

請(qǐng)問要怎么做才能達(dá)到題目要求的輸出結(jié)果?

回答
編輯回答
涼薄
tableData = [
    ['apples', 'oranges', 'cherries', 'banana'],
    ['Alice', 'Bob', 'Carol', 'David'],
    ['dogs', 'cats', 'moose', 'goose']
]

def print_table(data):
    col_width = [max(len(item) for item in col) for col in data]
    for row_idx in range(len(data[0])):
        for col_idx, col in enumerate(data):
            item = col[row_idx]
            align = '<' if not col_idx==0 else '>'
            print(('{:'+align+str(col_width[col_idx])+'}').format(item), end=' ')
        print()

print_table(tableData)

結(jié)果:

  apples Alice dogs  
 oranges Bob   cats  
cherries Carol moose 
  banana David goose

我回答過的問題: Python-QA

2017年12月3日 15:58