¿Cómo verificar una lista contenida en otra lista sin un bucle?

Como lo menciona el título, ¿hay algún componente para hacer este trabajo? Lo busqué en dir(list) pero no obtuve uno utilizable. Gracias.

Depende de lo que entiendas por “contenido”. Tal vez esto:

 if set(a) <= set(b): print "a is in b" 

Suponiendo que desea ver si todos los elementos de la sublist también son elementos de superlist :

all(x in superlist for x in sublist)

La solución depende de qué valores espera de sus listas.

Si existe la posibilidad de una repetición de un valor, y necesita verificar que haya suficientes valores en el contenedor probado, aquí hay una solución ineficiente en el tiempo:

 def contained(candidate, container): temp = container[:] try: for v in candidate: temp.remove(v) return True except ValueError: return False 

prueba esta función con:

 >>> a = [1,1,2,3] >>> b = [1,2,3,4,5] >>> contained(a,b) False >>> a = [1,2,3] >>> contained(a,b) True >>> a = [1,1,2,4,4] >>> b = [1,1,2,2,2,3,4,4,5] >>> contained(a,b) True 

por supuesto, esta solución puede mejorarse enormemente: list.remove () puede consumir mucho tiempo y puede evitarse utilizando una clasificación e indización inteligentes. pero no veo cómo evitar un bucle aquí …

(de todos modos, cualquier otra solución se implementará utilizando conjuntos o listas de comprensión, que utilizan bucles internamente …)