Najlepsza metoda zmiany listy podczas iteracji nad nią [duplikat]

To pytanie ma już tutaj odpowiedź:

Jak usunąć elementy z listy podczas iteracji? 23 odpowiedzi

Mam kilka wystąpień w skrypcie Pythona (v2.6), w którym muszę zmodyfikować listę na miejscu. Muszę wystrzelić wartości z listy w odpowiedzi na interaktywne dane wejściowe od użytkownika i chciałbym poznać najczystszą metodę tego. Obecnie mam bardzo brudne rozwiązania a) ustawiania elementów na liście, które chcę usunąć, na False i usuwania ich za pomocą filtra lub rozumienia listy lub b) generowania całkowicie nowej listy podczas przechodzenia przez pętlę, co wydaje się niepotrzebnie dodawanie zmiennych do przestrzeni nazw i zajmowanie pamięci.

Przykład tego problemu jest następujący:

<code>for i, folder in enumerate(to_run_folders):
    if get_size(folder) < byte_threshold:
        ans = raw_input(('The folder {0}/ is less than {1}MB.' + \
                    ' Would you like to exclude it from' + \
                    ' compression? ').format(folder, megabyte_threshold))
        if 'y' in ans.strip().lower():
            to_run_folders.pop(i)
</code>

Chciałbym spojrzeć na każdy folder na liście. Jeśli bieżący folder jest mniejszy niż określony rozmiar, chcę zapytać użytkownika, czy chcą go wykluczyć. Jeśli tak, popuść folder z listy.

Problem z tą procedurą polega na tym, że jeśli wykonam iterację na liście, otrzymuję nieoczekiwane zachowanie i wcześniejsze zakończenie. Jeśli wykonuję iterację kopii przez krojenie, pop nie pobiera prawidłowej wartości, ponieważ indeksy są przesuwane, a związki problemowe w miarę otwierania kolejnych elementów. Potrzebuję tego rodzaju dynamicznej regulacji listy w innych obszarach mojego skryptu. Czy istnieje jakaś czysta metoda dla tego rodzaju funkcjonalności?

questionAnswers(5)

yourAnswerToTheQuestion