2016-11-05 3 views
1

Hallo also lassen Sie uns sagen, ich habe ein 2D-Array a = [[1,2,1,2], [3,4,5,3], [8,9,4,3]] und ich möchte dies in einer Raster-ähnlichen Tabelle ausdrucken. Bisher ist der Code, den ich habe, ist:Wie drucke ich ein 2D-Array in einem "hübschen" Format?

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) 

Wenn diese ausgedruckt wird, gibt mir:

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 

Und dann den Fehler:

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

IndexError: list index out of range 

Kann mir jemand sagen, warum das so ist Ereignis? Ich will auch nicht das "None" am Ende jeder Zeile. Ich will es Ausgabe:

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

Sie müssen keine Variable deklarieren, um Dinge auszudrucken. Es gibt keine zurück, da die Variable b tatsächlich nichts mehr hat, sobald die for-Schleife mit der Variablen b vorbei ist. Entferne die letzte Zeile. – JackTheCrab

+0

Sie verwenden 'len (a [0])' für Spalten und Zeilen. Wenn Sie eine quadratische Matrix haben, würde es funktionieren, aber das ist nicht der Fall für das Beispiel, das Sie angegeben haben. –

+0

Um hübsche Tabellen zu drucken, hat Python ein Modul namens [prettytable] (https://pypi.python.org/pypi/PTable/0.9.2). – Efferalgan

Antwort

0

Hier ist, was Ihr verwenden:

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) 

Sie zwei mit len(a[0]) für Loops verwenden, aber Ihre Eingangsdaten ist kein Platz, so dass nicht kann Arbeit!

Sie betrachten könnte dies mit:

def printA(a): 
    for row in a: 
     for col in row: 
      print("{:8.3f}".format(col), end=" ") 
     print("") 

, die Ihnen dies:

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

Sie verwenden len (a [0]) in beiden Schleifen.

Verwendung

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

Sie haben die erste Reihe falsch (und die zweite die Länge der aktuellen Zeile nehmen sollte) und Sie keine Variable b brauchen:

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

Es sind drei Hauptprobleme mit dem Code, den Sie gepostet haben: die Art und Weise der Iteration durch das Array, die Zuweisung der b Variablen an die Rückgabe einer print Anweisung, und das Drucken dieser b Variable.

Erstens ist die Art, wie Sie durch das Array iterieren, ziemlich kontraintuitiv. Sie können einfach

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

verwenden, um es deutlich zu machen.

Zweitens scheint Ihr Verständnis der print Anweisung etwas zu fehlen. Die Anweisung print nimmt ein Argument auf und gibt es direkt aus, so dass es nicht einer Variablen zugewiesen werden muss. Da die print-Anweisung keine offizielle Rückgabe hat, gibt sie automatisch None zurück, was mit dem nächsten Punkt übereinstimmt, um die None s am Ende Ihrer Druckanweisungen zu erklären.

Schließlich wird das Drucken der b Variable, die einen Wert None zugewiesen hat, wie oben diskutiert, die None s Sie erzeugt.


Um Ihren Code zu beheben, können Sie die folgende Lösung verwenden.

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) 

Anders als das, was oben erwähnt, unterscheidet sich dieser Code durch einen print("") Zugabe, die in eine neue Zeile entspricht, nach jeder Reihe in dem Array.

Verwandte Themen