Noriu apibrėžti dvimatį masyvą be inicializuoto ilgio taip:
Matrix = [][]
bet tai neveikia...
Bandžiau žemiau pateiktą kodą, bet jis taip pat neteisingas:
Matrix = [5][5]
Klaida:
Traceback ...
IndexError: list index out of range
Kokia mano klaida?
Techniškai bandote indeksuoti neinicializuotą masyvą. Prieš pridėdami elementus, pirmiausia turite inicializuoti išorinį sąrašą su sąrašais; Python tai vadina "sąrašo supratimu".
# 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
Atkreipkite dėmesį, kad matrica yra "y" adresų pagrindinė, kitaip tariant, "y indeksas" yra prieš "x indeksą".
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
Nors galite juos pavadinti, kaip norite, aš į tai žiūriu taip, kad išvengtumėte tam tikros painiavos, kuri gali kilti dėl indeksavimo, jei vidiniam ir išoriniam sąrašui naudosite "x" ir norėsite ne kvadratinės Matricos.
Turėtumėte sudaryti sąrašų sąrašą, o geriausias būdas - naudoti įterptines suprantamąsias struktūras:
>>> 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]]
Jūsų [5][5]
pavyzdyje jūs sukuriate sąrašą su sveikuoju skaičiumi "5" viduje ir bandote pasiekti penktąjį jo elementą, o tai, savaime suprantama, sukelia IndexError, nes penktojo elemento nėra:
>>> l = [5]
>>> l[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range