Python - 将数组的数组打印为 table

Python - Print array of array as table

给定数组 A 的数组定义为

A = [[1, 2, 3, 4], [10, 20, 30, 40], [100, 200, 300, 400]],

如果调用打印函数

for i in range(0,3):
    print A[i]

下面是输出

[1, 2, 3, 4]
[10, 20, 30, 40]
[100, 200, 300, 400].

如何获得这样的 "prettier" 输出:

[  1,   2,   3,   4]
[ 10,  20,  30,  40]
[100, 200, 300, 400]

??? 谢谢

您只需要知道可能存在的最大位数。如果如您的示例所示位数为三,请执行以下操作:

for i in A:
    print(", ".join([str(l).rjust(3) for l in i]))

使用 str(i).rjust(3)i 右对齐到宽度为 3 的字段中,其中额外的字符是空格。您可以使用 str(i).zfill(3) 将它们设为零,或者您可以使用 str(i).rjust(3, "&") 将它们设为任何您想要的值。

输出:

  1,   2,   3,   4
 10,  20,  30,  40
100, 200, 300, 400

当然,为了使其适用于更多情况,您可以使用 len(str(max(map(max, A)))) 而不是硬编码 3.

为什么不为此使用 numpy 数组?

import numpy as np
print np.array(A)

[[  1   2   3   4]
 [ 10  20  30  40]
 [100 200 300 400]]

这段代码会更加动态。这将通过 max_len.

找到最大数字的长度和 rjust
A = [[1, 2, 3, 4], [10, 20, 30, 40], [11100, 20033, 300, 400]]

max_len = len(str(max( max(i) for i in A)))

for i in A:
    print(", ".join([str(l).rjust(max_len) for l in i]))

如果记录是整数,则不能在其中包含这些空格,但这段代码似乎很好地拆分了数组。

A = [1999999, 2, 3, 47678], [10, 20, 30, 40], [100, 200, 300, 400]
MaxLength=0
for i in range(0,3):
    for x in A[i]:
        MaxLength =len(str(x)) if MaxLength<len(str(x)) else MaxLength
for i in range(0,3):
    for x in range(0,len(A[i])):
        Length=MaxLength-len(str(A[i][x]))
        print((" "*Length)+str(A[i][x]),end="|")
    print()

如果您确实需要,可以在定义中调用它,只需这样做:

def TableFormat(A):
    MaxLength=0
    for i in range(0,3):
        for x in A[i]:
            MaxLength =len(str(x)) if MaxLength<len(str(x)) else MaxLength
    for i in range(0,3):
        for x in range(0,len(A[i])):
            Length=MaxLength-len(str(A[i][x]))
            print((" "*Length)+str(A[i][x]),end="|")
        print()

然后你可以用 A 作为数组做 TableFormat(A) 来整齐地打印 table。 end="|" 可以换成任何你想用

划分记录的东西

最简单的方法是使用两个 for 循环

    for list in A:
        for element in list:
            print element, '\t',
        print '\n'

试试这个。