weranda
@weranda

Как в Python делается выравнивание элементов строк при выводе?

Приветствую

Задался вопросом выравнивание элементов нескольких списков относительно их позиций так, чтобы при выводе каждый элемент был расположен по вертикальной оси на одинаковом смещении. С элементами, состоящими из одного символа все впорядке, но если в одном списке есть элемент произвольной длинны, то все рушится.

Допустим есть два списка. В каждом списке по пять элементов:
a = ['1', '2', '3', '4', '5']
b = ['●', '●', '●', '●', '●']

Если элементы выводить через for...in в строку, то отображается нормально:
5d5ed9a9e9564ccca75d0ee22228c399.png
Если же какому-нибудь элементу первого списка увеличить длинну, то, как писал выше, все рушится:
3559170906984ad7a2ee183fdd5d5fa4.png
Помню, где-то читал про это и даже записал себе информацию об этом, но недавно потерял эту информацию, а найти не могу. Подскажите пожалуйста как решить.
  • Вопрос задан
  • 3192 просмотра
Решения вопроса 3
Djaler
@Djaler
Сеньор-помидор
Для этого есть модуль prettytable
Ответ написан
Комментировать
Roland_Deschain
@Roland_Deschain
a = ['1', '2', '3333', '4', '5']
b = ['●', '●', '●', '●', '●']
c = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh']

lst = [a, b, c]

max_len = max(len(i) for x in lst for i in x)

for x in lst:
    w = '\t'.join(['%' + str(max_len) + 's']*len(x))
    print(w % tuple(x))
Ответ написан
Комментировать
@abcd0x00
>>> a = ['1', '2', '3333', '4', '5']
>>> b = ['●', '●', '●', '●', '●']
>>> align = list(map(len, a))
>>> 
>>> def make_line(seq, aligns):
...     return ' '.join('{0:>{1}}'.format(i, j) for i, j in zip(seq, aligns))
... 
>>> out = '\n'.join((make_line(a, align), make_line(b, align)))
>>> print(out)
1 2 3333 4 5
● ●    ● ● ●
>>>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
В терминале текст моноширинный - можете смело забивать пробелами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы