使用Python打印出像表一样的2D列表

时间:2014-12-09 21:08:26

标签: python list tabular

我试图打印出像桌子一样的2D列表,我在这里找到了一段代码: Pretty print 2D Python list

但我无法理解它是如何运作的,有人可以向我解释一下吗?

s = [[str(e) for e in row] for row in matrix]
lens = [max(map(len, col)) for col in zip(*s)]
fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
table = [fmt.format(*row) for row in s]
print '\n'.join(table)

2 个答案:

答案 0 :(得分:1)

正如其他人所评论的那样,这里有很多概念(在一个答案中太多而无法管理)。但是对于你的进一步研究(依次使用(小)示例2D列表来尝试每个语句),这是它如何分解:

将数据转换为字符串列表列表(使用 list comprehension ):

s = [[str(e) for e in row] for row in matrix]

获取每列中最大字符数的列表,以便我们知道如何格式化列:

lens = [max(map(len, col)) for col in zip(*s)]

(这个更复杂:zip()这里允许我们迭代s的列,将每个列传递给len()方法以查找其长度(这是通过{实现的} {1}});然后找到内置map()的每列的最大长度。)

将相应的Python格式字符串设置为以制表符分隔的条目:

max()

fmt = '\t'.join('{{:{}}}'.format(x) for x in lens) 现在是每一行的格式说明符,例如fmt三列宽度为4,6,6(NB仅适用于Python 2.7+,因为字段尚未编号)

将表格设置为字符串格式的行列表(使用其他列表解析):

'{:4}\t{:6}\t{:6}'

将整个部分组合在一个字符串中,行以换行符分隔:

table = [fmt.format(*row) for row in s]

print '\n'.join(table) 获取一个字符串列表并生成一个字符串,所有字符串都由选定的分隔符(此处为join(),换行符)连接在一起。

答案 1 :(得分:0)

使用 print() 中的“end”函数的一种更简单的方法:

{"sub_error":20152,"error_description":"invalid code","error":1101}

“end”函数设置参数结束后将打印的内容。 '\t' 参数设置一个制表符,它均匀地间隔表格。