如何以“漂亮”的格式打印2D数组?

时间:2016-11-05 17:51:53

标签: python arrays list 2d

您好,我们假设我有一个2D数组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

有人能告诉我为什么会这样吗?我不想在每一行的末尾都有'无'。我希望它输出:

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

4 个答案:

答案 0 :(得分:1)

您发布的代码有三个主要问题:迭代数组的方式,b变量赋值给print语句的返回,以及打印b变量。

首先,迭代数组的方式相当直观。你可以简单地使用

def printArray(arr):
    for row in arr:
        for item in row:
            # code for printing

使其更清晰。

其次,您对print语句的理解似乎有点缺乏。 print语句接受一个参数并直接打印出来,因此无需将其分配给变量。由于print语句没有正式返回,它会自动返回None,它与下一个点相关联,以解释打印语句末尾的None

最后,如上所述打印分配了值b的{​​{1}}变量会生成您看到的None

要修复代码,可以使用以下解决方案。

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) ,相当于一个新行。

答案 1 :(得分:0)

以下是您正在使用的内容:

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]) for循环,但您的输入数据不是正方形,因此无法正常工作!

你可以考虑使用它:

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 

答案 2 :(得分:0)

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

使用

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

答案 3 :(得分: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()