El mejor método para cambiar una lista mientras se itera sobre ella [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo eliminar elementos de una lista mientras se está iterando? 23 respuestas

Tengo varias instancias en un script de Python (v2.6) donde necesito modificar una lista en el lugar. Necesito extraer valores de la lista en respuesta a la entrada interactiva del usuario y me gustaría saber cuál es el método más limpio para hacerlo. Actualmente tengo las soluciones muy sucias de a) establecer elementos en la lista que quiero eliminar a Falso y eliminarlos con un filtro o una lista de comprensión o b) generar una lista completamente nueva mientras recorro el bucle, lo que parece innecesario añadiendo variables al espacio de nombres y ocupando memoria.

Un ejemplo de este problema es el siguiente:

<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>

Me gustaría ver cada carpeta en la lista. Si la carpeta actual tiene menos de un tamaño determinado, quiero preguntar al usuario si desea excluirla. Si lo hacen, saca la carpeta de la lista.

El problema con esta rutina es que si itero sobre la lista, obtengo un comportamiento inesperado y una terminación anticipada. Si itero sobre una copia cortando, el pop no obtiene el valor correcto porque los índices se desplazan y el problema se agrava a medida que se despliegan más elementos. También necesito un ajuste de lista dinámico de este tipo en otras áreas de mi script. ¿Hay algún método limpio para este tipo de funcionalidad?

Respuestas a la pregunta(5)

Su respuesta a la pregunta