如何以“漂亮”的格式打印二维数组?

5

你好,假设我有一个二维数组 a = [[1,2,1,2], [3,4,5,3], [8,9,4,3]]。我想将其以表格的形式打印出来。目前我拥有的代码是:

def printArray(a):
    for row in range(len(a[0])):
        for col in range (len(a[0])):
            b = print("{:8.3f}".format(a[row][col]), end = " ")
        print(b)

当这个被打印出来时,它会给我:

  1.000    2.000    1.000    2.000 None
  3.000    4.000    5.000    3.000 None
  8.000    9.000    4.000    3.000 None

然后出现了错误:

File "hw8pr2.py", line 17, in printArray
b = print("{:8.3f}".format(a[row][col]), end = " ")

IndexError: list index out of range

有人可以告诉我为什么会发生这种情况吗?我也不希望每一行结尾都有 "None"。我希望输出结果为:
  1.000    2.000    1.000    2.000
  3.000    4.000    5.000    3.000
  8.000    9.000    4.000    3.000

你不需要声明一个变量来打印输出内容。它返回 "none" 是因为变量 b 在 for 循环结束后实际上并没有任何值。移除最后一行即可。 - JackTheCrab
你正在使用 len(a[0]) 来表示行和列。如果你有一个方阵,那么这将起作用,但对于你所给出的示例情况并非如此。 - J. P. Petersen
为了打印漂亮的表格,Python有一个巧妙地命名为prettytable的模块。 - Efferalgan
4个回答

2

这是你正在使用的内容:

def printArray(a):
    for row in range(len(a[0])):
        for col in range (len(a[0])):
            b = print("{:8.3f}".format(a[row][col]), end = " ")
        print(b)

你正在使用两个for循环,长度为len(a[0]),但是你的输入数据不是正方形,所以这样做行不通!你可以考虑使用以下方法:
def printA(a):
    for row in a:
        for col in row:
            print("{:8.3f}".format(col), end=" ")
        print("")

这将会给你这个:
In [14]: a = [[1, 2, 1, 2], [3, 4, 5, 3], [8, 9, 4, 3]]

In [15]: printA(a)
   1.000    2.000    1.000    2.000 
   3.000    4.000    5.000    3.000 
   8.000    9.000    4.000    3.000 

In [16]: b = [[1, 2, 1, 2, 5], [3, 4, 7, 5, 3], [8, 2, 9, 4, 3], [2, 8, 4, 7, 6]]

In [17]: printA(b)
   1.000    2.000    1.000    2.000    5.000 
   3.000    4.000    7.000    5.000    3.000 
   8.000    2.000    9.000    4.000    3.000 
   2.000    8.000    4.000    7.000    6.000 

1
您发布的代码存在三个主要问题:遍历数组的方式、将变量b赋值给print语句的返回值和打印该b变量。
首先,您遍历数组的方式相当不直观。您可以简单地使用
def printArray(arr):
    for row in arr:
        for item in row:
            # code for printing

为了让它更加清晰,第二点,你对print语句的理解似乎有些欠缺。print语句接受一个参数并直接打印出来,所以不需要将其分配给变量。由于print语句没有官方返回值,它自动返回None,这与下一个点解释了你在print语句末尾看到的None。最后,打印具有值None的变量b(如上所述)会产生您看到的None。
为了修复您的代码,您可以使用以下解决方案。
a = [[1,2,1,2], [3,4,5,3], [8,9,4,3]]

def printArray(arr):
    for row in arr:
        for item in row:
            print("{:8.3f}".format(item), end = " ")
        print("")

printArray(a)

除了上述内容外,此代码还通过在数组中的每一行后添加print("")(相当于换行符)来进行区分。

0

你在两个循环中都使用了 len(a[0])。

使用

for row in range(len(a)):
  for col in range(len(a[0])):

0

你的第一个范围是错误的(第二个范围应该取当前行的长度),而且你不需要一个变量b:

def printArray(a):
    for row in range(len(a)):
        for col in range (len(a[row])):
            print("{:8.3f}".format(a[row][col]), end = " ")
        print()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接