Как центрировать список в Python без модулей?

Мне надо центрировать список в Python без модулей, например:

 │     1     │     2     │     3     │ 
 │     4     │     5     │     6     │ 
 │     7     │     8     │     9     │ 

table_data = [
    ['1', '2', '3'],
    ['4', '5', '6'], 
    ['7', '8', '9']
]

Таким образом, чтобы количество столбцов было не ограничено.

У меня получилось сделать с таким кодом, но вывод немного не такой, как хотелось бы

def make_table(): 
    table_data = [
        ['1', '2', '3'],
        ['4', '5', '6'], 
        ['7', '8', '9']
    ]
    for row in table_data:
        print(" │ {: >5} │ {: >5} │ {: >5} │ ".format(*row))
 │     1 │     2 │     3 │ 
 │     4 │     5 │     6 │ 
 │     7 │     8 │     9 │ 

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

Автор решения: insolor

Для форматирования по центру используйте знак ^ вместо >:

table_data = [
    ['1', '2', '3'],
    ['4', '5', '6'], 
    ['7', '8', '9']
]
for row in table_data:
    print(" │ {:^5} │ {:^5} │ {:^5} │ ".format(*row))
 │   1   │   2   │   3   │ 
 │   4   │   5   │   6   │ 
 │   7   │   8   │   9   │ 
→ Ссылка
Автор решения: GrAnd

Посчитать максимальную длину текста для каждого столбца, затем отцентровать каждый элемент согласно посчитанной длине для этого столбца, а затем склеить список используя join().

def make_table(): 
    table_data = [
        ['1', '2', '3'],
        ['4', 'sdfdfdfs', '6'], 
        ['7', '8', '9']
    ]
    lengths = [max(map(len, col))+2 for col in zip(*table_data)]
    for row in table_data:
        print('|'+'|'.join(txt.center(lengths[i]) for i, txt in enumerate(row))+'|')

make_table()
| 1 |    2     | 3 |
| 4 | sdfdfdfs | 6 |
| 7 |    8     | 9 |

Если нужно чтобы вообще все колонки были равны, то просто посчитать максимальную длину текста во всех ячейках.

    length = max(max(map(len, row)) for row in table_data) + 2
    for row in table_data:
        print('|'+'|'.join(txt.center(length) for i, txt in enumerate(row))+'|')
|    1     |    2     |    3     |
|    4     | sdfdfdfs |    6     |
|    7     |    8     |    9     |
→ Ссылка