Forum >> Principianti >> list index out of range PERCHE'?

Pagina: 1

dopo aver popolato una lista con i numeri che vanno da 2 a 10000 devo eliminare da essa i multipli di 2, 3, 4, escludendo il 2, 3, 4, .... fino al numero 100
def popola(lista):
    for i in range(9998):
        lista.append(i+2)
    return (lista)

def elimina(lista,n):
    for i in range(len(lista)):
        if lista%n==0:
            lista.remove(lista)
    return (lista)

def main():
    lista = []
    lista = popola(lista)
    for n in range(2,101):
        lista = elimina(lista,n)
    for i in range(len(lista)):
        print (lista,end=" ")
    return

main()

il codice si blocca qui:
 if lista%n==0:
penso di aver individuato il problema, aggiornamento della dimensione lista, ma come posso fare a risolverlo?
Grazie a tutti e buon week end
Salvatore
il codice si blocca qui:
 if lista%n==0:
Ciao caro, ora non posso provare il tuo codice visto che sono in giro, ma credo sia facile capire che non puoi fare quell'operazione con una lista, non ha un gran senso non trovi?

Infatti immagino che ti trovi davanti ad un TypeError perché è proprio quello che succede se provi a "cercare" il resto della divisione (%) tra una lista ed un numero.

Cya
Buon giorno e buona domenica ...
ho commesso un errore nel postere il codice
ecco quello corretto
infatti l'errore che mi da in fase di run è quello indicato in oggetto
def popola(lista):
    for i in range(9998):
        lista.append(i+2)
    return (lista)

def elimina(lista,n):
    for i in range(len(lista)):
        if lista%n == 0:
            lista.remove(lista)
        else:
            continue
    return (lista)
            
            
def main():
    lista = []
    lista = popola(lista)
    for n in range(2,101):
        lista = elimina(lista,n)
    print(len(lista))
    for i in range(len(lista)):
        print (lista,end=" ")
    return

main()

  

il codice mi da errore in questo punto:
if lista%n == 0:
IndexError: list index out of range
 
e capisco che il problema è nell'aggiornamento della dimensione, c'ho pensato un pò ....
mi sono venute in mente delle soluzione alternative ma mi sembrano un pò farraginose.
Sapresti consigliarmi su come correggere?
Grazie infinite
Salvatore
PS: noto che nel copia e incolla non compaiono le parentesi quadre per indicizzare sulla lista
è forse uin problema di editor?
def elimina(lista,n):
    for i in range(len(lista)):
        if lista%n == 0:
            lista.remove(lista)
        else:
            continue
    return (lista)
Ciao Salvatore, ci sono alcune incongruenze, la più vistosa è che la funzione elimina() non va bene. Non ho eseguito il codice, ma forse vorresti una cosa del genere?
def elimina(lista,n):
    for i in range(len(lista)):
        if (i % n) == 0 and i in lista:
            lista.remove(i)
        else:
            continue
    return (lista)
Inoltre attento a quei cicli for, come li hai scritti non ti fanno ottenere quello che desideri, ad occhio almeno uno è di troppo.

Fammi sapere.
Cya
Ciao Daniele allora ho provato il tuo codice:

1. la def elimina che mi hai suggerito tu cicla lungo tutta la lista e se il numero rispetta la condizione viene rimosso con remove ma questo non aggiorna la dimensione della lista ad ogni rimozione?

2. nel main uso un ciclo for che chiama elimina per ogni valore del divisore n ( del quale devo vedere se gli elementi della lista sono multipli)

3. il secondo for è per stamapre ciò che resta della lista dopo la scrematura fatta da elimina

sapresti dirmi perchè con la modalità adottata da me, incorrevo nell'errore
list index out of range?

per completezza ti riporto la traccia dell'esercizio:

scrivere un programma che inserisca in una lista tutti i numeri da 2 a 10000, poi elimini da tale lista i multipli di 2(tranne 2), i multipli di 3 ( tranne 3) e cosi via, fino ai multipli di 100, visualizzando infinie i valori rimasti nella lista.

Grazie infinite e buona domenica

Salvatore
Salvatore scusami, ma non è mia consuetudine entrare nel merito dell'esercizio che devi/vuoi svolgere, altrimenti non impari nulla.

Non ho provato il tuo codice, quello che volevo farti notare è che la funzione elimina() fosse sbagliata ancor prima logicamente, perché non ha senso cercare il resto da una lista. Credo di avertelo scritto tre volte compreso questo messaggio, ma deve essere un problema mio che non riesco a farti capire che cosa sbagli.

Sono ben felice di aiutarti, cercando di consigliarti nei punti critici, ma non di scrivere il codice al posto tuo.

Resto in attesa degli sviluppi, sono qui se hai bisogno.

Cya
Non è mia consuetudine aspettare che altri facciano per me
Ho postato la traccia semplicemente per completezza di informazione tutto qui




A presto buona serata

S!



Non è mia consuetudine aspettare che altri facciano per me
Ho postato la traccia semplicemente per completezza di informazione tutto qui
Perfetto Salvatore, non c'è nessun problema per me, ti volevo solo illustrare la mia posizione, magari ti potevo sembrare snob o saccente nel non volerti rispondere con dei codici di esempio, ma lo faccio per te, così mi hanno insegnato (ed ho patito).

Sono sicuro che sei un "volenteroso" programmatore, aspetto i tuoi risultati o un punto bloccante, come ad esempio è (era?) quello del resto da un lista.

A presto e buona serata anche a te.


--- Ultima modifica di Daniele aka Palmux in data 2018-01-21 17:45:40 ---


Pagina: 1



Esegui il login per scrivere una risposta.