IndexError: list index out of range

di il
5 risposte

IndexError: list index out of range

""" Questo codice ""Dovrebbe" aprire "nome_file.xlsx" salvo il contenuto del foglio di lavoro nella variabile foglio
ed eseguo un ciclo while perchè tra le mie costanti sò di sicuro che ci sono max 51 righe compilate nel file.
ogni riga sarà composta da una data + numeri interi. prendo quindi i numeri di ogni riga e li salvo in lista_totale.
di questi numeri voglio verificare quante volte è presente ogni numero all'interno di ogni riga del file e lo salvo nella variabile confronto.
alla fine stampo quante volte è presente ogni numero all' interno di ogni riga.

P.s. Si acettano consigli su miglioramento codice e se possibile come semplificarlo.
Scusate ma sono nuovo sia sul sito che per quanto riguarda python
sorry.


Grazie a tutti x l'aiuto.





from openpyxl import load_workbook  #importa il modulo per poter leggere files da exel

row = 5   #perchè il file parte dalla row N° 5
lista_totale = []  #lista dove carico i numeri da controllare
data = []  # data è la prima parte della riga che spezzo in quanto è la data
appoggio = []
counter = 0
confronto= []  #variabile per il confronto dei numeri in lista_totale
numero = ()  # prelevo singolarmente ogni numero della lista-totale per confrontarlo
conta = 0  #conteggio utilizzato per passare al numero successsivo della lista
conta_max = 0  '''conteggio utillizzato per provare ad arrestare il ciclo For di riferimento prima dell'errore Traceback (most recent call last):
               File "C:/RoboDK/Python37/Phyton/mio_file_3.py", line 72, in <module>
               x = lista_totale [conta]#conta è un contatore per passare al N successivo
               IndexError: list index out of range'''   f30  f30  f30 




while row != 51:

    cartella = load_workbook(filename = "mio_file.xlsx")   #salvo nella variabile cartella
                                                                                    # il contenuto del file " test lettur....xlsx
    foglio = cartella["Worksheet"]   #carico il contenuto del foglio(Worksheet) nella variabile foglio
    estrazione = (foglio[f"A{row}"].value)#Salvo in estrazione il valore della riga
    data.append (estrazione [0:10])#estrapolazione prima parte cioe la data
    lista_totale.append (estrazione[16:]) #estrapolazione parte numerica
        
    row += 1 #aumento alla riga successiva
    x = lista_totale [conta] 
    print ()

    for i in lista_totale:
        
        conta_max += 1 #verifico quanti numeri i sono all'interno della lista per cercare di evitare l'errore ma l'errore ce lo stesso.
                
        

        
            
    for numero in lista_totale:   #per ogni N della lista

       

        
                    
            
            if x in appoggio: #se il N è in Lista [appoggio]

                if conta_max != conta_max + 1:  tentetivo di arrestare l' errore

                    
                
                    conta += 1 
                    x = lista_totale [conta]
                    
            
            
            elif x not in appoggio:#se il Numero NOT in Lista [appoggio]
            
                             
                if x == numero:
                    counter += 1 #conteggio ripetizione N
                    
            
                  
        
                
    confronto.append (f"{x} {counter}")                                    
    print (f"Il Numero {x} è estato estratto {counter} volte")
    print (confronto)
    appoggio.append (x) 
    conta += 1 #di lista_totale                  
    x = lista_totale [conta] #conta è un contatore per passare al N successivo            
    counter = 0  # resetto il conteggio a ciclo ultimato
    print (appoggio) 
    
      

5 Risposte

  • Re: IndexError: list index out of range

    Che ne dici di togliere il colore verde che rende poco leggibili i caratteri e formattare il blocco di codice con il tag Code, pulsante "</>" ?
  • Re: IndexError: list index out of range

    Grazie per il suggerimento.
  • Re: IndexError: list index out of range

    Non si capisce niente. Se l'errore è quello di riga 30, allora mancano pezzi di programma, e ci sono degli 'f30' vaganti senza meta. L'errore è auto-esplicativo, 'conta' non è un indice valido (ma quanto vale 'conta' lo puoi sapere solo tu che hai l'intero programma).
    Controlla 'conta' e 'lista_totale'.
  • Re: IndexError: list index out of range

    Ciao Andrea ,
    grazie per la tua risposta.
    Il codice che ho postato è completo non manca niente..
    ...quello che posso dirti di sicuro è che non è ancora finito.
    ma mi sono fermato perchè a questo punto viene fuori l'errore quindi non riesco ad andare avanti.
    per quanto riguarda gli "f30" sono semplicemente le faccine del sito che ho dimenticato di cancellare quando ho modificato il codice per una migliore lettura sul sito. ---> "f30".
    Posto solo l'errore così da essere quanto più preciso possibile.
    grazie ancora .
    Verificando il codice su Visualize python mi sono reso conto che nel' ultimo ciclo la var conta diventa più grande della lista_totale.
    cerco di spiegarmi meglio.
    conta_max mi serve a capire sostanzialmente quanti numeri ci sono nella lista quindi se x es. conta_max == 5 e lista_totale[conta] == lista_totale[6] viene fuori il seguente errore che non riesco a gestire
    
    File "C:/RoboDK/Python37/Phyton/mio_file_3.py", line 72, in <module>
                   x = lista_totale [conta]#conta è un contatore per passare al N successivo
                   IndexError: list index out of range
                   
  • Re: IndexError: list index out of range

    Ciao a tutti,
    sembrerebbe che ho risolto un problema ma ne ho creato un altro
    Allora ho modificato il codice capendo come girava su Visualize Python ed adesso non ho piu l'errore "IndexError: list index out of range".
    In compenso mi ritrovo un altro problema che in sostanza in lista finisce tutta la prima row del file come un unico numero.
    mi spiego meglio es:
    lista_totale[1,2,3,4] se fosse cosi prenderebbe prima 1 e lo confronta cont tutti gli altri ma il problema è che lista_totale diventa ['1,2,3,4'] quindi lista_totale[0] = lista_totale["1,2,3,4"] come faccio a togliere gli apici per far diventare ogni row una serie di numeri?
    come faccio inoltre a dire che alla fine della prima row salvata in lista voglio andare in \n per dividere riga x riga nella mia lista x una migliore lettura?
    grazie ancora a tutti.
    
    
    from openpyxl import load_workbook  # importa il modulo per poter leggere files da exel
    row = 5   #perchè il file parte dalla row N° 5
    lista_totale = []  #lista dove carico i numeri da controllare
    data = []  # data è la prima parte della riga che spezzo in quanto è la data
    appoggio = []
    counter = 0
    confronto= []  #variabile per il confronto dei numeri in lista_totale
    numero = ()  # prelevo singolarmente ogni numero della lista-totale per confrontarlo
    conta = 0  #conteggio utilizzato per passare al numero successsivo della lista
    conta_max = 0  
    
    while row <= 51:    
        cartella = load_workbook(filename = "mio_file.xlsx")    #salvo nella variabile cartella
                                                                # il contenuto del file " test lettur....xlsx
        foglio = cartella["Worksheet"]   #carico il contenuto del foglio(Worksheet) nella variabile foglio
        estrazione = (foglio[f"A{row}"].value) #Salvo in estrazione il valore della riga
        data.append (estrazione [0:10]) #estrapolazione prima parte cioe la data
        lista_totale.append (estrazione[16:]) #estrapolazione parte numerica'''     
        row += 1 #aumento alla riga successiva
    print (lista_totale)
    x = lista_totale [conta] 
    print ()
    for i in lista_totale:            
        conta_max += 1 #verifico quanti numeri ci sono all'interno della lista per cercare di evitare l'errore
    conta_max = conta_max - 1            
    for numero in lista_totale:#per ogni N della lista
        if x in appoggio:#se il N è in Lista [appoggio]
            if conta < conta_max:# tentetivo di arrestare l' errore
                conta += 1 
                x = lista_totale [conta]                    
            else :            
                print ("Ciclo finito") 
                pass            
        elif x not in appoggio:#se il Numero NOT in Lista [appoggio]                             
            if x == numero:          
                counter += 1 #conteggio ripetizione N
    confronto.append (f"{x} {counter}")                                    
    print (f"Il Numero {x} è estato estratto {counter} volte")
    print (confronto)
    appoggio.append (x) 
    conta += 1 #di lista_totale                  
    x = lista_totale [conta]  #conta è un contatore per passare al N successivo            
    counter = 0  # resetto il conteggio a ciclo ultimato
    conta_max = 0  # resetto il conteggio a ciclo ultimato
    print (appoggio)
    
Devi accedere o registrarti per scrivere nel forum
5 risposte