Как центрировать список в 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 |