Eliminare elemento lista in un ciclo

S
Simone99_ (1180 points)
13 50 59
asked Oct 21, 2017 in Es1 by Simone99_ (1,180 points)
closed Nov 3, 2017 by andrea.sterbini
salve a tutti,  ho un problema con un mio programma, in pratica non riesco ad eliminare l'elemento di una lista se una condizione si verificata
279 views
closed with note: consegna passata

2 Answers

giorgio.belli (10140 points)
17 74 98
answered Oct 21, 2017 by giorgio.belli (10,140 points)
Simone ti rispondo anche se sul regolamento è specificato che non si può postare alcuna riga di codice ma soltanto pseudo-codice.

Comunque la funzione Del non puo essere usata in quel modo ma devi specificare il nome della lista ls[indice] cosi che l'interprete sappia di dover eliminare l'elemento in posizione indice nella lisa ls.

Giusto per tua conoscenza potresti andare a vedere anche la funzione ls.remove() con cui puoi rimuovere un elemento (digita sulla shell help(list.remove)) per avere piu informazioni)
Spero di essere stato di aiuto
S
Simone99_ (1180 points)
13 50 59
commented Oct 21, 2017 by Simone99_ (1,180 points)
innanzitutto mi scuso e ti ringrazio per la risposta, per quanto riguarda l'indice , ci ho pensato anche io, ma quale indice devo utilizzare ? non posso scrivere "del ls[x]" perchè andrebbe out of range, cosi come non posso utilizzare "i" :/
giorgio.belli (10140 points)
17 74 98
commented Oct 21, 2017 by giorgio.belli (10,140 points)
A questo proposito c'è la funzione "enumerate" che fa proprio al caso tuo e che potresti usare nel primo ciclo cosi da ottenere l'elemento x e la sua posizione nella lista; avendo la posizione avrai anche l'indice dell'elemento da eliminare
S
Simone99_ (1180 points)
13 50 59
commented Oct 21, 2017 by Simone99_ (1,180 points)
il problema è che con enumerate non si può fare il reverse, almeno questo è quello che mi dice phyton
LeonardoEmili (35740 points)
11 65 155
answered Oct 21, 2017 by LeonardoEmili (35,740 points)

Ciao Simone99, 

ti consiglio di editare immediatamente la riposta in quanto non è permesso postare il codice. Segui quanto detto da giorgio.belli e ti consiglio di vedere bene come funziona del ls[index] e ls.remove(item).

Buona giornata.

Leonardo Emili

S
Simone99_ (1180 points)
13 50 59
commented Oct 21, 2017 by Simone99_ (1,180 points)
ho modificato scrivendo ls.remove(x), ma ora mi da la lista totalmente vuota :(
LeonardoEmili (35740 points)
11 65 155
commented Oct 21, 2017 by LeonardoEmili (35,740 points)
Devi utilizzare il metodo ls.remove(item) solo quando il caso lo richiede. Altrimenti se iteri l'operazione per ogni item di ls questa ti sarà restituita vuota! p.s. aggiungi però qualche info in pseudocodice se vuoi nella tua domanda così da aiutarti meglio!
S
Simone99_ (1180 points)
13 50 59
commented Oct 21, 2017 by Simone99_ (1,180 points)
si infatti io inserisco ls.remove(item) solo all'interno della condizione, è per questo che sto impazzendo e non riesco a capire
LeonardoEmili (35740 points)
11 65 155
commented Oct 21, 2017 by LeonardoEmili (35,740 points)
Hai provato a posizionare dei print() all'interno del tuo codice verificando che la lista non sia già vuota?
S
Simone99_ (1180 points)
13 50 59
commented Oct 21, 2017 by Simone99_ (1,180 points)
si , ho provato anche ad isolare quella funzioncina che mi trova i divisori, ma nulla, c'è un problema nel contesto generale  che non riesco a capire
LeonardoEmili (35740 points)
11 65 155
commented Oct 21, 2017 by LeonardoEmili (35,740 points)
In questo caso la miglior cosa è dividere il codice in funzioni logiche, devi riuscire a capire bene come funziona il programma. Quindi il mio consiglio è: dimenticati dell'intricatezza e del tempo di esecuzione, scrivi il codice come risulta a te più leggibile e "meglio diviso" e trova il punto esatto in cui il comportamento strano si verifica! Poi potrai divertirti e tornare a "ridisegnare" il tuo codice :D