Jeg ønsker at definere et todimensionelt array uden en initialiseret længde på følgende måde:
Matrix = [][]
men det virker ikke...
Jeg'har prøvet nedenstående kode, men den er også forkert:
Matrix = [5][5]
Fejl:
Traceback ...
IndexError: list index out of range
Hvad er min fejl?
Du forsøger teknisk set at indeksere et uinitialiseret array. Du skal først initialisere den ydre liste med lister, før du tilføjer elementer; Python kalder dette "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
Bemærk, at matrixen er "y" adresse-major, med andre ord kommer "y-indekset" før "x-indekset".
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
Selv om du kan navngive dem som du vil, ser jeg på det på denne måde for at undgå forvirring, der kan opstå med indekseringen, hvis du bruger "x" for både den indre og den ydre liste, og ønsker en ikke-firkantet matrix.
Du bør lave en liste af lister, og den bedste måde er at bruge indlejrede forståelser:
>>> 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]]
I dit eksempel [5][5]
opretter du en liste med et heltal "5" indeni, og forsøger at få adgang til dens 5. element, og det giver naturligvis en IndexError, fordi der ikke er noget 5. element:
>>> l = [5]
>>> l[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range