Foros del Web » Programando para Internet » Python »

Como comprobar que una lista contenga todos los elementos de otra

Estas en el tema de Como comprobar que una lista contenga todos los elementos de otra en el foro de Python en Foros del Web. Hay una forma facil de comprobar que lista2 contenga todos los elementos que contiene lista1? Se me ocurrió hacerlo de esta forma pero me parece ...
  #1 (permalink)  
Antiguo 13/10/2012, 22:44
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Como comprobar que una lista contenga todos los elementos de otra

Hay una forma facil de comprobar que lista2 contenga todos los elementos que contiene lista1?

Se me ocurrió hacerlo de esta forma pero me parece que debe haber una forma mas simple y mas eficiente:
Código Python:
Ver original
  1. xs = [1,2,3,4]
  2. ys = [1,2,3,4,5,6,7]
  3. if not [x for x in xs if not x in [y for y in ys]]:
  4.     print "listays contiene todos los elementos de listaxs"
Estoy creando un array que se llene con los elementos de listaxs si los elementos no estan contenidos en la listays y si la lista queda vacia pues es porque se encuentran todos, la verdad se me hace que lo estoy haciendo de una forma que no deberia porque uso mucho esta comprobacion y creo que la creacion de un array cada vez vuelve ineficiente mi programa. Me imagino que debe haber alguna funcion en python que haga esta tarea pero no la encuentro.
PD. uso Python2.7

Última edición por shujidan; 13/10/2012 a las 23:18
  #2 (permalink)  
Antiguo 13/10/2012, 23:18
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Como comprobar que una lista contenga todos los elementos de otra

Código Python:
Ver original
  1. if not(set(ys) - set(xs)):
  2.     print "ys contiene todos los elementos de xs"

Creo que esta es la forma mas efeciente que se me ocurre. Funciona usando conjuntos (sets) lo cual hace mucho menos comparaciones, el unico inconveniente es que usa mas memoria.
  #3 (permalink)  
Antiguo 13/10/2012, 23:53
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Respuesta: Como comprobar que una lista contenga todos los elementos de otra

Retornaria un set vacio el cual creo que es mas pesado que la lista, existe esta funcion que es mas rapida set(xs).issubset(set(ys)) la cual creo que no recorre todo el set para comprobar cada elemento.
Y bueno si fuera a ocupar mucho espacio una lista no creo que hubieran implementado las list comprehensions en python. Creo que desde el principio no estuvo mal implementado mi codigo solo que aun me da inseguridad malinterpretar estas funcionalidades, ahora que lo comprobé es bastante rapido y no hace trabajo innecesario.
PD. Gracias razpeitia, no recordaba las estructuras set.

Última edición por shujidan; 14/10/2012 a las 10:17

Etiquetas: elementos, lista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:48.