【问题标题】:Printing out a 2D list like a table with Python用 Python 打印出像表格一样的二维列表
【发布时间】:2014-12-09 21:08:25
【问题描述】:

我正在尝试打印一个像表格一样的二维列表,我在这里找到了一段代码: 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)

【问题讨论】:

  • 你不明白什么?列出理解?地图?压缩?论据解包?加入?格式?

标签: python list tabular


【解决方案1】:

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

将数据转换为字符串列表的列表(使用列表理解):

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

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

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

(这个更复杂:zip() 这里使我们能够遍历s 的列,将每个列传递给len() 方法以找到它的长度(这是通过map() 实现的);然后找到max() 内建的每列的最大长度。)

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

fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)

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

将表格设置为字符串格式的行列表(使用另一个列表理解):

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

将所有内容合并成一个字符串,行由换行符分隔:

print '\n'.join(table)

join() 获取一个字符串列表并生成一个字符串,它们全部由所选分隔符连接在一起(此处为\n,换行符)。

【讨论】:

    【解决方案2】:

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

    table = [["A", "B"], ["C", "D"]]
    for row in table:
        for col in row:
            print(col, end = "\t")
    

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

    【讨论】:

    • 这也可以非常随机地显示数据。如果某个单元格的字符多于平均值,它可能会破坏整行的填充/间距。因此,尽管此解决方案可能有效,但它并不是显示表格等矩阵的最佳解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2017-12-15
    • 2020-07-29
    相关资源
    最近更新 更多