Tengo una lista que consta de como 20000 listas. Yo uso el tercer elemento de cada lista como una bandera. Quiero hacer algunas operaciones en esta lista siempre que al menos el indicador de un elemento sea 0, es como:
my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
Al principio, todas las banderas son 0. Uso un ciclo while para verificar si al menos la bandera de un elemento es 0:
def check(list_):
for item in list_:
if item[2] == 0:
return True
return False
Si check(my_list)
regresa True
, entonces sigo trabajando en mi lista:
while check(my_list):
for item in my_list:
if condition:
item[2] = 1
else:
do_sth()
En realidad, quería eliminar un elemento en my_list mientras iteraba sobre él, pero no se me permite eliminar elementos mientras itero sobre él.
My_list original no tenía banderas:
my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]
Como no podía eliminar elementos mientras lo repetía, inventé estas banderas. Pero my_list
contiene muchos elementos, y el while
ciclo los lee todos en cada for
ciclo, ¡y consume mucho tiempo! ¿Tienes alguna sugerencia?
None
o []
mientras itera sobre la lista en lugar de eliminarlos. Verificar la lista completa con 'check ()' iterando sobre todos los elementos antes de cada pasada en el bucle interno es un enfoque muy lento.