es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Cuando descomentas la línea #my_list_2.remove(i), se elimina el elemento de my_list_2 en la primera coincidencia de un elemento de my_list en your_list. Esto cambia el tamaño de my_list_2 y causa problemas en el bucle anidado, ya que itera sobre todos los elementos de my_list mientras el tamaño de my_list_2 se reduce. Esto lleva a omitir ciertos elementos de my_list.

    Para evitar este problema, puedes crear una nueva lista y agregar los elementos de my_list solo si no están presentes en your_list. Aquí tienes un código actualizado:

    my_list = [ 
        '100a',
        '100b',
        '100c'
    ]
    
    your_list = [
        '100a_nnb',
        '100b_ub',
        '100c_AGGtb'
    ]
    
    my_list_2 = []
    
    for i in my_list:
        if i not in your_list:
            my_list_2.append(i)
    
    print(my_list_2)
    

    Resultado:

    ['100a', '100b', '100c']
    

    Con este código actualizado, se crea una lista vacía llamada my_list_2 y luego se itera sobre todos los elementos de my_list. Si algún elemento está presente en your_list, no se agrega ese elemento a my_list_2. Finalmente, se imprime la lista actualizada my_list_2 con solo los elementos que no están presentes en your_list.

Comments are closed.