Выравнивание вывода по правому краю

Как правильно выровнять строку, которую получили с помощью метода join, чтобы слова были выровнены друг под другом по правом краю

Правильный вывод

def printTable(TableData):
    maxWidth = [0] * len(TableData)     
    for i in range(len(TableData)):     
        k = max(TableData[i], key=len)
        maxWidth[i] = (len(k))
        p = (' ').join(TableData[i])
        print(p.rjust(max(maxWidth)))

TableDataList = [
    ['apples','oranges','cherries','banana'],
    ['Alice','Bob','Carol','David'],
    ['dogs','cats','moouse','goose']
]
        
print(printTable(TableDataList))
apples oranges cherries banana  
Alice Bob Carol David  
dogs cats moouse goose

Вывод должен быть как на картинке, но текст вообще не выравнивается. Подскажите, может нужно как-то выравнивать каждое слово?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

rjust ровняет колонку. zip поворачивает матрицу:

def rjust(column):
    w = max(map(len, column))
    return [s.rjust(w) for s in column]


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

for row in zip(*map(rjust, columns)):
    print(*row)
$ python table.py
  apples Alice   dogs
 oranges   Bob   cats
cherries Carol moouse
  banana David  goose
→ Ссылка