Красивая печать Python матрицы - PullRequest
2 голосов
/ 05 января 2012

Я должен напечатать несколько строк данных и сделать это хорошо. Я могу сделать это с C ++, изменяя параметры std :: cout, но я не могу понять, как я могу сделать это с Python. Например, у меня есть это:

row1 = [1, 'arc1.tgz', 'First', '15.02.1992']
row2 = [16, 'arc2modified.tgz', 'Second', 'today']
row3 = ['112', 'arc89.tgz', 'Corrupted', 'unknown']

Я хочу напечатать текст так:

1    arc1.tgz          First      15.02.1992
16   arc2modified.tgz  Second     today
112  arc89.tgz         Corrupted  unknown

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

Основная проблема в том, что я могу использовать только модули Python по умолчанию. Есть ли возможность сделать это? Большое спасибо!

1 Ответ

9 голосов
/ 05 января 2012
my_matrix = [row1, row2, row3]
print "\n".join(["\t".join(map(str, r)) for r in my_matrix])

ETA: в моем исходном ответе не указывалось, что вы хотите, чтобы каждый столбец имел фиксированную ширину с использованием пробелов (а не табуляции). Выглядит так, как будто вы хотите ровно два пробела между самой длинной датумом и следующей колонкой. В этом случае это можно сделать следующим образом (обратите внимание, что string является встроенным модулем Python по умолчанию):

import string

max_lens = [max([len(str(r[i])) for r in my_matrix])
                for i in range(len(my_matrix[0]))]

print "\n".join(["".join([string.ljust(str(e), l + 2)
                for e, l in zip(r, max_lens)]) for r in my_matrix])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...