Python 矩阵的美观打印

2 投票
1 回答
3278 浏览
提问于 2025-04-17 09:37

我需要打印几行数据,而且要打印得好看。我可以用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
my_matrix = [row1, row2, row3]
print "\n".join(["\t".join(map(str, r)) for r in my_matrix])
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])

补充说明:我之前的回答没有注意到你想要每一列的宽度是固定的,使用的是空格填充(而不是制表符)。看起来你还希望最长的数据和下一个列之间有两个空格。这样的话,可以按照下面的方式来做(注意string是Python自带的一个模块):

撰写回答