Ich möchte ein zweidimensionales Array ohne eine initialisierte Länge wie folgt definieren:
Matrix = [][]
aber es funktioniert nicht...
Ich'habe versucht, den Code unten, aber es ist auch falsch:
Matrix = [5][5]
Fehler:
Traceback ...
IndexError: list index out of range
Was ist mein Fehler?
Sie versuchen technisch gesehen, ein nicht initialisiertes Array zu indizieren. Sie müssen zuerst die äußere Liste mit Listen initialisieren, bevor Sie Elemente hinzufügen; Python nennt dies "Listenverständnis".
# Creates a list containing 5 lists, each of 8 items, all set to 0
w, h = 8, 5;
Matrix = [[0 for x in range(w)] for y in range(h)]
Matrix[0][0] = 1
Matrix[6][0] = 3 # error! range...
Matrix[0][6] = 3 # valid
Beachten Sie, dass die Matrix eine "y"-Adresse hat, d. h. der "y-Index" steht vor dem "x-Index".
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
Man kann sie zwar benennen, wie man will, aber ich sehe das so, um Verwirrung zu vermeiden, die bei der Indexierung entstehen könnte, wenn man "x" sowohl für die innere als auch für die äußere Liste verwendet und eine nicht-quadratische Matrix will.
Sie sollten eine Liste von Listen erstellen, und das geht am besten mit verschachtelten Comprehensions:
>>> matrix = [[0 for i in range(5)] for j in range(5)]
>>> pprint.pprint(matrix)
[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
In Ihrem Beispiel [5][5]
erstellen Sie eine Liste mit einer ganzen Zahl "5" darin und versuchen, auf das fünfte Element zuzugreifen, was natürlich einen Indexfehler auslöst, da es kein fünftes Element gibt:
>>> l = [5]
>>> l[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range