Quero definir uma matriz bidimensional sem um comprimento inicializado como este:
Matrix = [][]
mas não funciona...
I'tentei o código abaixo, mas também está errado:
Matrix = [5][5]
*Error:_***
Traceback ...
IndexError: list index out of range
Qual é o meu erro?
Você'está tecnicamente tentando indexar um array não-inicializado. Você tem que primeiro inicializar a lista externa com listas antes de adicionar itens; Python chama isto " compreensão de lista".
# 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
Note que a matriz é "y" endereço principal, em outras palavras, o "y index" vem antes do "x index".
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
Embora você possa nomeá-los como quiser, eu vejo desta forma para evitar alguma confusão que poderia surgir com a indexação, se você usar "x" tanto para a lista interna quanto para a externa, e quer uma Matriz não quadrada.
Você deve fazer uma lista de listas, e a melhor maneira é usar as compreensões aninhadas:
>>> 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]]
Em seu [5][5]
exemplo, você está criando uma lista com um número inteiro "5" dentro, e tente acessar seu 5º item, e isso naturalmente levanta um IndexError porque não há 5º item:
>>> l = [5]
>>> l[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range