Ik wil een tweedimensionale array definiëren zonder een geïnitialiseerde lengte, zoals dit:
Matrix = [][]
maar het werkt niet...
Ik'heb de onderstaande code geprobeerd, maar die is ook fout:
Matrix = [5][5]
Error:
Traceback ...
IndexError: list index out of range
Wat is mijn fout?
Technisch gezien probeer je een niet-geïnitialiseerde array te indexeren. Je moet eerst de buitenste lijst initialiseren met lijsten voordat je items toevoegt; Python noemt dit "list comprehension".
# 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
Merk op dat de matrix "y" adres-groot is, met andere woorden, de "y index" komt voor de "x index".
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
Hoewel je ze kunt noemen zoals je wilt, bekijk ik het op deze manier om enige verwarring te voorkomen die zou kunnen ontstaan met de indexering, als je "x" gebruikt voor zowel de binnenste als de buitenste lijst, en een niet-vierkante Matrix wilt.
Je moet een lijst van lijsten maken, en de beste manier is om geneste comprehensies te gebruiken:
>>> 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 je [5][5]
voorbeeld, maak je een lijst met een geheel getal "5" erin, en probeert toegang te krijgen tot het 5e item, en dat geeft natuurlijk een IndexError omdat er geen 5e item is:
>>> l = [5]
>>> l[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range