Vamos por partes.
Um slice representa um “pedaço” da lista. Os números indicam os índices de início e fim (com o detalhe que o final não é incluso).
Por exemplo, [0:6]
indica que o slice começa no índice 0 e termina no 5 (lembre-se, o final não é incluso). Exemplo:
lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(lista[0:6]) # [0, 1, 2, 3, 4, 5]
Ou seja, [0:6]
pega os índices de 0 a 5, e retorna uma lista contendo esses elementos. E como os índices de uma lista começam em zero, então o resultado são os 6 primeiros elementos da lista.
No caso da sua matriz, ela na verdade é uma lista de listas (uma lista cujos elementos são outras listas):
matrix = [ # matrix é uma lista, cujos elementos também são listas
[0,0,0,0,0], # primeiro elemento da matriz
[0,12,11,10,0], # segundo elemento da matriz
[0,9,8,7,0], # terceiro elemento da matriz
[0,6,5,4,0], # quarto elemento da matriz
[0,3,2,1,0], # quinto elemento da matriz
[0,0,0,0,0] # sexto elemento da matriz
]
E como a matriz tem 6 elementos, então matrix[0:6]
acaba sendo o mesmo que toda a matriz:
matrix = [
[0,0,0,0,0],
[0,12,11,10,0],
[0,9,8,7,0],
[0,6,5,4,0],
[0,3,2,1,0],
[0,0,0,0,0]
]
print(matrix[0:6]) # imprime a matriz inteira
print(matrix) # veja que mostra a mesma coisa do print acima
Em seguida, o slice [0:2]
pega os dois primeiros elementos dessa matriz. Mas como já vimos que matrix[0:6]
está pegando toda a matriz, então matrix[0:6][0:2]
acaba sendo o mesmo que matrix[0:2]
:
# ambos imprimem os 2 primeiros elementos da matriz (as 2 primeiras listas)
print(matrix[0:6][0:2]) # [[0, 0, 0, 0, 0], [0, 12, 11, 10, 0]]
print(matrix[0:2]) # [[0, 0, 0, 0, 0], [0, 12, 11, 10, 0]]
Ou seja, o seu for
está iterando pelos dois primeiros elementos da matriz (que no caso, são as listas [0, 0, 0, 0, 0]
e [0, 12, 11, 10, 0]
).
Se você só quer as duas primeiras colunas de cada linha, então na verdade você precisa pegar o slice de cada uma delas separadamente:
for linha in matrix:
print(linha[0:2])