Bunun gibi başlangıç uzunluğu olmayan iki boyutlu bir dizi tanımlamak istiyorum:
Matrix = [][]
ama çalışmıyor...
Aşağıdaki kodu denedim ama o da yanlış:
Matrix = [5][5]
Hata:
Traceback ...
IndexError: list index out of range
Benim hatam ne?
Teknik olarak başlatılmamış bir diziyi indekslemeye çalışıyorsunuz. Öğe eklemeden önce dış listeyi listelerle başlatmanız gerekir; Python buna "liste anlama".
# 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
Matrisin "y" adres majör olduğunu, diğer bir deyişle "y indeksinin" "x indeksinden" önce geldiğini unutmayın.
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
Bunları istediğiniz gibi adlandırabilmenize rağmen, hem iç hem de dış listeler için "x" kullanıyorsanız ve kare olmayan bir Matris istiyorsanız, indeksleme ile ortaya çıkabilecek bazı karışıklıkları önlemek için bu şekilde bakıyorum.
Listelerden oluşan bir liste yapmalısınız ve bunun en iyi yolu iç içe kavramalar kullanmaktır:
>>> 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]]
5][5]` örneğinizde, içinde "5" tamsayısı olan bir liste oluşturuyorsunuz ve 5. öğesine erişmeye çalışıyorsunuz ve bu doğal olarak bir IndexError'a neden oluyor çünkü 5. öğe yok:
>>> l = [5]
>>> l[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range