Tengo una lista compuesta por 20000 listas similares. Yo uso el tercer elemento de cada lista como una bandera. Quiero hacer algunas operaciones en esta lista, siempre y cuando la bandera de al menos un elemento es 0, es como:¿Cómo comprobar si todos los elementos de una lista coinciden con una condición?
my_list = [["a", "b", 0], ["c", "d", 0], ["e", "f", 0], .....]
Al principio todas las banderas son 0. Puedo usar un bucle while para comprobar si al menos un elemento de bandera es 0:
def check(lista):
for item in lista:
if item[2] == 0:
return True
return False
If check(my_list)
vuelve True
, a continuación, sigo trabajando en mi lista:
while check(my_list):
for item in my_list:
if condition:
item[2] = 1
else:
do_sth()
realidad quería para eliminar los elementos de my_list como iterado sobre él, pero no puedo eliminar el elemento mientras lo repito.
my_list original no tenía banderas:
my_list = [["a", "b"], ["c", "d"], ["e", "f"], .....]
Como no podía quitar elementos como se repiten a lo largo, inventé estas banderas. Pero el my_list
contiene muchos elementos, y el bucle while
los lee todos en cada bucle for
, ¡y consume mucho tiempo! ¿Tienes alguna sugerencia?
se parece a la estructura de datos no es la ideal para su problema.Si explicó el contexto un poco más, tal vez podríamos sugerir algo más apropiado. – uselpa
Tal vez podría reemplazar los elementos con 'Ninguno' o' [] 'mientras itera sobre la lista en lugar de eliminarlos. Comprobar la lista completa con 'check()' iterar sobre todos los elementos antes de cada pasada en el bucle interno es un enfoque muy lento. – martineau