Come suggerisce il professore il problema è che stai effettuando contemporaneamente operazioni di lettura e di scrittura su una stessa lista, portandoti ad ottenere dei risultati sbagliati.
Ogni volta che utilizzi la funzione delete (del <elemento>) su una lista, Python procede eliminando il riferimento all'elemento specificato ed aggiornando tutti gli indici in modo tale da non avere "buchi" da qualche parte.
Ti faccio un esempio al volo: nella lista L = [10, 20, 30, 40] l'indice dell'elemento 30 è 2 (ricordati di iniziare a contare da zero), ovvero L[2] → 30; tuttavia se elimini il primo elemento della lista tutti gli indici dei valori successivi verranno aggiornati in modo tale che non vi siano celle vuote all'interno della lista. Se adesso andiamo a stampare il valore con indice 2 non sarà più 30 come prima ma L[2] → 40 [tutti gli indici sono slittati di -1].
Questo è probabilmente il problema del tuo algoritmo: se dall'interno di un ciclo for (o iterando in altro modo) vai a rimuovere un elemento dalla stessa lista che stai leggendo otterrai che per ogni rimozione il ciclo ignorerà un valore della lista in quanto non è consapevole che i suoi indici sono stati aggiornati per far fronte all'eliminazione di un valore (ci sono anche buone probabilità che venga generato un IndexError). In altre parole ti perdi dei pezzi per la via.
Per risolvere il problema senza creare una nuova lista dovresti creare un algoritmo che sappia adattarsi ad eventuali rimozioni effettuate sulla lista. Tuttavia questo metodo presenta alcuni problemi:
- è controintuitivo (e poco pythonico);
- aggiunge complessità al programma;
- rende più facile la comparsa involontaria di errori e bug.
Per non complicarti inutilmente la vita ti consiglio di crearti una nuova lista (magari utilizzando una list comprehension) dove inserire unicamente i valori validi piuttosto che essere taccagni con la memoria. Al momento non ci dobbiamo preoccupare troppo della complessità spaziale dei nostri programmini, quindi tanto vale scrivere del codice chiaro e semplice (anche se leggermente più costoso) per risolvere i nostri problemi.
Spero di esserti stato d'aiuto!