Domanda Python: IndexError: list index out of range

bea.b

Utente Iron
28 Aprile 2019
5
1
0
14
Ultima modifica:
Buongiorno a tutti,
mi sto cimentando da poco nel linguaggio python e sto provando a rapprensentare un grafo a partire dalla sua matrice di adiacenza.
La matrice di adiacenza l'ho caricata da un file csv.
Quello che ho provato a fare è questo:

Codice:
import csv
import numpy as np
from pythonds import*

with open("grafo.csv", newline="") as csvfile:
    grafo = list(csv.reader(csvfile,delimiter=",")) # grafo contiene il contenuto del filecsv
    for row in grafo:
        print(', '.join(row)) # stampo la matrice di adiacenza
g=Graph()
num_colonne = len(grafo)
for v in range (1, num_colonne+1):
    g.addVertex(v)
print ("vertici del grafo: ", g.getVertices())
for u in range(0,num_colonne -1):
    for v in range(0,num_colonne -1):
        if grafo[u][v]==1:
            g.addEdge(u,v)
            print(u,v)

Il problema che riscontro è nella linea evidenziata in rosso, ed è il seguente:
"IndexError: list index out of range", da quello che ho capito l'errore sta nel fatto che gli indici siano fuori dalla lista.
La matrice è una matrice 6 * 6, quindi gli indici dovrebbero andare da 0 a 5, ho provato anche a fare varie prove ma non riesco a capire dove sto sbagliando.
c'è qualcuno che mi può aiutare, soprattutto a capire quale è l'errore concettuale che c'è dietro.
Grazie

Python:
import csv
import numpy as np
from pythonds import*
with open("grafo.csv", newline="") as csvfile:
    grafo = list(csv.reader(csvfile,delimiter=",")) # grafo contiene il contenuto del filecsv
    for row in grafo:
        print(', '.join(row)) # stampo la matrice di adiacenza
g=Graph()
num_colonne = len(grafo)
print(len(grafo))
for v in range (1, num_colonne+1):
    g.addVertex(v)
print ("vertici del grafo: ", g.getVertices())
for u in range(0,num_colonne -1):
    for v in range(0,num_colonne -1):
        print(u,v)
        if grafo[u][v]==1:
            g.addEdge(u,v)
 
Grazie.
Scusami ma non mi è troppo chiaro ancora dove sia l'errore.
Ho provato a stampare la lunghezza del grafo e mi stampa 6
E l index outofrange?
Usa il tag code per il codice cosi capiamo senza grossi sforzi di rielaborazione mentale ahah

Inviato dal mio LG-H870 utilizzando Tapatalk
 
Il range come hai scritto tu è sballato.

Range(0, 15) va da 0 a 14 quindi 15 escluso
Come hai scritto tu il range è così

Range(1, 1) "se la lunghezza dell'array è 0"
Quindi così va out of range.

Se vuoi che l'esecuzione del programma continui anche con questo errore usa un blocco try e catch
 
Il range come hai scritto tu è sballato.

Range(0, 15) va da 0 a 14 quindi 15 escluso
Come hai scritto tu il range è così

Range(1, 1) "se la lunghezza dell'array è 0"
Quindi così va out of range.

Se vuoi che l'esecuzione del programma continui anche con questo errore usa un blocco try e catch
Volevi dire try except? Comunque leggi meglio perché hai detto qualche inesattezza

Inviato dal mio LG-H870 utilizzando Tapatalk
 
Scusami mi sono appena accorta di un errore, il comando è "if grafo[v]==1",
comunque ho aggiunto print(u,v) e mi stampa:
0 0 e 0 1
Metti il codice in un tag code e posta anche il file csv.
Se togli il newline non penso grafo abbia righe, solo colonne. Quando posti il csv posso dirti per certo

Inviato dal mio LG-H870 utilizzando Tapatalk
 
Ultima modifica:
Metti il codice in un tag code e posta anche il file csv.
Se togli il newline non penso grafo abbia righe, solo colonne. Quando posti il csv posso dirti per certo

Inviato dal mio LG-H870 utilizzando Tapatalk
Metti il codice in un tag code e posta anche il file csv.
Se togli il newline non penso grafo abbia righe, solo colonne. Quando posti il csv posso dirti per certo

Inviato dal mio LG-H870 utilizzando Tapatalk
Messaggio unito automaticamente:

Hai ragione, il file ha solo una colonna e 6 righe
Messaggio unito automaticamente:

Metti il codice in un tag code e posta anche il file csv.
Se togli il newline non penso grafo abbia righe, solo colonne. Quando posti il csv posso dirti per certo

Inviato dal mio LG-H870 utilizzando Tapatalk
Credo di aver risolto, scrivendo correttamente il filecsv
Grazie mille per il tuo aiuto.
 

Allegati

  • Schermata da 2019-04-28 14-28-32.webp
    Schermata da 2019-04-28 14-28-32.webp
    27.6 KB · Visualizzazioni: 25
Indietro
Top Bottom