list.remove() dentro de bucles for anidados
Tengo dos listas y quiero comprobar si los elementos de la primera lista están en la segunda lista.
Si es cierto, quiero eliminar el elemento coincidente de una copia de mi primera lista.
my_list = [
'100a',
'100b',
'100c'
]
your_list = [
'100annb',
'100bub',
'100cAGGtb'
]
my_list_2 = my_list
for i in my_list:
for j in your_list:
if i in j:
print(f'Sí, ¡{i} está en {j}!')
#my_list_2.remove(i)
break
else:
print(f'No, ¡{i} no está en {j}!')
Cuando dejo el comentario #my_list_2.remove(i)
sin comentar, obtengo el resultado esperado:
Sí, ¡100a está en 100annb!
No, ¡100b no está en 100annb!
Sí, ¡100b está en 100bub!
No, ¡100c no está en 100annb!
No, ¡100c no está en 100bub!
Sí, ¡100c está en 100cAGGtb!
Cuando quito el comentario #, obtengo:
Sí, ¡100a está en 100annb!
No, ¡100c no está en 100annb!
No, ¡100c no está en 100bub!
Sí, ¡100c está en 100cAGGtb!
¿Por qué sucede esto? Parece que se salta cada segundo elemento de la lista.
davy.ai
Cuando descomentas la línea
#my_list_2.remove(i)
, se elimina el elemento demy_list_2
en la primera coincidencia de un elemento demy_list
enyour_list
. Esto cambia el tamaño demy_list_2
y causa problemas en el bucle anidado, ya que itera sobre todos los elementos demy_list
mientras el tamaño demy_list_2
se reduce. Esto lleva a omitir ciertos elementos demy_list
.Para evitar este problema, puedes crear una nueva lista y agregar los elementos de
my_list
solo si no están presentes enyour_list
. Aquí tienes un código actualizado:Resultado:
Con este código actualizado, se crea una lista vacía llamada
my_list_2
y luego se itera sobre todos los elementos demy_list
. Si algún elemento está presente enyour_list
, no se agrega ese elemento amy_list_2
. Finalmente, se imprime la lista actualizadamy_list_2
con solo los elementos que no están presentes enyour_list
.