2016-11-05 105 views
1

你好,我们假设我有一个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 

谁能告诉我这是为什么发生了什么?我不希望每行末尾都有'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 
+0

你不需要声明一个变量来打印出东西。它没有返回任何值,因为变量b的for循环结束后,变量b实际上没有任何东西。删除最后一行。 – JackTheCrab

+0

您正在为列和行使用'len(a [0])'。如果你有一个sqare矩阵它会起作用,但是你给出的例子不是这种情况。 –

+0

要打印漂亮的表格,Python有一个巧妙命名为[prettytable]的模块(https://pypi.python.org/pypi/PTable/0.9.2)。 – Efferalgan

回答

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])但输入数据是不是正方形,以至于不能工作!

您可以考虑使用此:

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 
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() 
1

有是您发布的代码的三个主要问题:迭代遍历数组的方式,b变量的赋值返回print语句以及打印该变量b。首先,你在数组中迭代的方式是非常直观的。您可以简单地使用

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

使其更清楚。

其次,您对print声明的理解似乎有点欠缺。语句print接受一个参数并直接打印出来,因此不需要将其分配给一个变量。由于print语句没有正式的返回,它会自动返回None,这与下一点有关,在打印语句结束时解释None

最后,如上所述,打印b值为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) 

除了上述的之外,这代码不同通过添加print(""),其等同于一个新行,在阵列中的每一行之后。