2016-11-05 7 views
1

こんにちは、私は2D配列a = [[1,2,1,2], [3,4,5,3], [8,9,4,3]]を持っていて、これをテーブルのようなグリッドに印刷したいとします。これまでのところ、私が持っているコードは次のとおりです。2D配列を「きれいな」形式でプリントするには?

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」も望んでいません。私は出力にそれをしたい:

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) 

をあなたがlen(a[0])でループのための2つを使用しているが、あなたの入力データが正方形ではないので、それができない:ここでは

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は実際には何も持たないので、noneを返します。最後の行を削除します。 – JackTheCrab

+0

列と行の両方に 'len(a [0])'を使用しています。あなたがsqare行列を持っていればうまくいくでしょうが、これはあなたが与えた例の場合ではありません。 –

+0

かわいいテーブルを印刷するために、Pythonには[prettytable]という名前の巧みな名前のモジュールがあります(https://pypi.python.org/pypi/PTable/0.9.2)。 – Efferalgan

答えて

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([0])を使用しています。

使用

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

あなただ最初の範囲が間違っている(2つ目は、現在の行の長さを取る必要があります)、あなたが変数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

を配列を反復する方法、printステートメントの返り値へのb変数の代入、およびb変数の印刷の3つの主な問題があります。

まず、配列を反復処理する方法はかなり直感的です。

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

を使用すると、はっきりさせることができます。

第2に、printステートメントの理解には少し欠けているようです。 printステートメントは引数をとり、直接出力するため、変数に代入する必要はありません。 printステートメントには公式な返答がないので、自動的にNoneを返します。次のポイントと結びついて、印刷ステートメントの最後に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("")を添加することによって異なります。

関連する問題