Duvida com matriz dinâmica em python

1. Duvida com matriz dinâmica em python

Gabryel Macedo
tskgarroti

(usa Linux Mint)

Enviado em 19/04/2018 - 21:31h

Pessoal, estou tentando fazer uma matriz dinâmica com python, mas não estou conseguindo



V = 4
dist = []

for i in range(V):
for j in range(V):
dist[i][j] = 0



Aparece o seguinte erro: IndexError: list index out of range

Alguem sabe como fazer matrizes dinâmicas com python ?


  


2. Re: Duvida com matriz dinâmica em python

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 26/04/2018 - 22:02h

Salve!

Não sei se entendi direito o vc quer, mas segue um exemplo de matriz dinâmica, usando list comprehension:

V=4
dist = [[i for i in range(V)] for j in range(V) ]

O codigo acima acaba de gerar, baseado no valor da sua variavel V(4), uma lista com 4 listas (lista 0, 1, 2, 3 ) cada uma das listas tem 4 itens (item 0,1,2,3).
Saída:
>>> print(dist)
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

O que seria o mesmo de:
V = 4
dist = []

for i in range(V):
dist.append([])
for j in range(V):
dist[i].append(j)


Saída:
>>> print(dist)
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]


DICA: No começo , listas podem parecer difíceis mas, definitivamente, não são. Esvazia a mente e desenhe cada passo do comando na cabeça:

for i in range(V): #Cria o loop para cada " i " num rande 0 a 3 (4 vezes), faça:
dist.append([]) # Cria uma sub-lista vazia na lista chamada dist
for j in range(V): #Cria o segundo loop dentro do primeiro fazendo: - para cada " j " num loop de 4 vezes, faça:
dist[i].append(j) #Lembrando aqui é o loop 2 tarefa #1 - adicione o valor de " j " na sub- lista " i " na lista mae dist

Sacou?

Agora, sobre o seu codigo, olha só como o python interpreta isso. Descontrair é sempre baum nesses casos :)

V = 4
PYTHON: Feito, chefe! Criei aqui uma variável chamada V e atribuí a ela o valor 4.


dist = []
PYTHON: Feito, chefe! Criei aqui uma lista vazia chamada dist.


for i in range(V):
PYTHON: opa! Vamos ver: V =4, então um range de 0 ate 3 é igual a 0 1 2 3. Endenti, chefe! Comecei aqui um loop que rodará 4 vezes e a cada
iteração eu vou atribuir o valor atual para variável i, que neste caso é 0


for j in range(V):
PYTHON: Entendido, você quer que a primeira tarefa do 1 primeiro lopp seja criar outro loop de 4 iterações e atribuindo o valor da iteração
para a variavel j.
Agora tenho que executar todas as tarefas desse loop, antes de voltar pro loop1. .ok, vamos lá.


dist[i][j] = 0
PYTHON: humm vamos ver: você quer que eu atribua valor 0 pra o item numero 0 da sublista 0 na lista mae dist. Mas ai você me quebra, chefe!
A lista tá vazia, lembra? Como que vou atribuir um valor para uma item que não existe numa sublista que não existe?


IndexError: list index out of range

erro de Indice : Indice da lista esta fora de alcance, chefe.


para você não se confundir, mais alguns exemplos:


#Vamos gerar 3 listas e dar nomes criativos elas :)

lista_1 = [0, 1, 2, 3]
lista_2 = [4, 5, 6, 7]
lista_3 = [8, 9, 10, 11]

#Agora vamos fazer uma lista chamada “listas_de_listas” com as listas que acabamos de criar:
lista_de_listas = [lista_1, lista_2, lista_3]

print(lista_de_listas)
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

vamos usar os índices pra imprimir.:

#Imprima o item de índice 0 da lista chamada lista_de_listas
print(lista_de_listas[0])
[0, 1, 2, 3]

#Imprima o item de índice 1 da lista chamada lista_de_listas
print(lista_de_listas[1])
[4, 5, 6, 7]

#Imprima o item de índice 2 da lista chamada lista_de_listas
print(lista_de_listas[2])
[8, 9, 10, 11]

#Forçando um erro
#Imprima o item de índice 5 ( que nao existe) da lista chamada lista_de_listas
print(lista_de_listas[5])
IndexError: list index out of range




Espero ter ajudado! Estou a um bom tempo longe do forum, mei que perdi a pratica de explicar.rsrs.

abs!



Uma vida sem desafios não vale a pena ser vivida.
Sócrates

---






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts