распечатать список списка в столбце как в Excel - PullRequest
0 голосов
/ 22 января 2020

Извините, если это нубский вопрос.

У меня есть список, например, "a", в котором два или два дерева внутри a1,a2,a3, например:

[ [1,2], [0,0,0], [1,2,3,4,5] ]
[ [1,2,3,4], [0,0], [1,2,3]   ]

et c ...

Каждый список внутри не имеет одинаковую длину, поэтому, когда я делаю простое

for i in range(len(a)):
    print(a[i])

, получается:

[[1,2],[0,0,0],[1,2,3,4,5]]
[[1,2,3,4],[0,0],[1,2,3]]

Пока Я жду этого результата, когда элементы в списке выровнены по столбцам:

[[1,2]          [0,0,0]      [1,2,3,4,5]]
[[1,2,3,4]      [0,0]        [1,2,3]]

Как мне это сделать?

Заранее спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Еще один быстрый и грязный подход с использованием str.format:

a = [[ [1,2], [0,0,0], [1,2,3,4,5] ],
     [ [1,2,3,4], [0,0], [1,2,3]   ],
     [ [1], [2,2]],
     []]

max_sublist = max(a, key=len)
max_len = len(str(max((i for subl in a for i in subl), key=lambda k: len(str(k)))))

for subl in a:
    print('[{}]'.format(('{!s:<{width}}' * len(max_sublist)).format(*subl, *' '*len(max_sublist), width=max_len)))

Отпечатки:

[[1, 2]         [0, 0, 0]      [1, 2, 3, 4, 5]]
[[1, 2, 3, 4]   [0, 0]         [1, 2, 3]      ]
[[1]            [2, 2]                        ]
[                                             ]
0 голосов
/ 22 января 2020

Вы можете использовать строковый метод ljust для выравнивания списков в соответствии с наибольшим:

a = [[[1, 2], [0, 0, 0], [1, 2, 3, 4, 5]],
     [[1, 2, 3, 4], [0, 0], [1, 2, 3]]]

size = max([len(str(x)) for sub in a for x in sub]) + 4

for sub in a:
    for x in sub:
        print(str(x).ljust(size), end="")
    print()

Это дает:

[1, 2]             [0, 0, 0]          [1, 2, 3, 4, 5]    
[1, 2, 3, 4]       [0, 0]             [1, 2, 3]   

Другой вариант с использованием одного l oop и метода join может быть:

for sub in a:
    print(''.join((str(x).ljust(size) for x in sub)))
...