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.

En Python, ¿por qué obtengo el mensaje de error “tipo no hasheable: ‘lista'” al hacer list(set(listaB)-set(listaA))?

Tengo listA=[[0,1,2]], y listB=[[0,1,2],[0,1,3],[0,2,3]], y quiero obtener los elementos que están en listB pero no en listA, es decir, mi resultado deseado es listC=[[0,1,3],[0,2,3]].

Ya obtuve listC utilizando una comprensión de listas:

listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=[b for b in listB if b not in listA]

Pero si quiero hacerlo de otra manera, es decir, utilizando la diferencia de conjuntos en el siguiente código, obtengo el mensaje de error “TypeError: Tipo no hashable:’list'”.

listA=[[0,1,2]]
listB=[[0,1,2],[0,1,3],[0,2,3]]
listC=list(set(listB)-set(listA))

¿Por qué aparece este error? ¿Cómo se puede solucionar? ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “unhashable type: ‘list'” ocurre porque las listas son mutables, lo que significa que su contenido puede modificarse sin cambiar su identidad. En contraste, los conjuntos requieren que sus elementos sean hashables, lo que significa que no pueden cambiarse sin cambiar su identidad. Las listas no son hashables, por lo que estás obteniendo este mensaje de error.

    Para solucionar este error, puedes convertir las listas en tuplas, que son hashables:

    listA=[(0,1,2)]
    listB=[(0,1,2),(0,1,3),(0,2,3)]
    listC=list(set(listB)-set(listA))
    

    Al convertir las listas en tuplas, te aseguras de que sean hashables y se puedan utilizar en operaciones de conjuntos como la diferencia de conjuntos. Esto debería darte el resultado deseado de listC=[[0,1,3],[0,2,3]].

Comments are closed.