¿Cómo puedo verificar si una lista es un subconjunto de otra?

Resuelto IUnknown asked hace 11 años • 14 respuestas

Necesito verificar si una lista es un subconjunto de otra; todo lo que busco es un retorno booleano.

¿Probar la igualdad en la lista más pequeña después de una intersección es la forma más rápida de hacerlo? El rendimiento es de suma importancia dada la cantidad de conjuntos de datos que deben compararse.

Añadiendo más datos basados ​​en discusiones:

  1. ¿Alguna de las listas será la misma para muchas pruebas? Lo hace porque uno de ellos es una tabla de búsqueda estática.

  2. ¿Tiene que ser una lista? No es así: la tabla de búsqueda estática puede ser cualquier cosa que funcione mejor. El dinámico es un dictado del que extraemos las claves para realizar una búsqueda estática.

¿Cuál sería la solución óptima dado el escenario?

IUnknown avatar May 16 '13 11:05 IUnknown
Aceptado
>>> a = [1, 3, 5]
>>> b = [1, 3, 5, 8]
>>> c = [3, 5, 9]
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False

>>> a = ['yes', 'no', 'hmm']
>>> b = ['yes', 'no', 'hmm', 'well']
>>> c = ['sorry', 'no', 'hmm']
>>> 
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False
Yulan Liu avatar Nov 24 '2014 23:11 Yulan Liu

Usarset.issubset

Ejemplo:

a = {1,2}
b = {1,2,3}
a.issubset(b) # True
a = {1,2,4}
b = {1,2,3}
a.issubset(b) # False

La función de rendimiento que Python proporciona para esto es set.issubset. Sin embargo, tiene algunas restricciones que no dejan claro si es la respuesta a su pregunta.

Una lista puede contener elementos varias veces y tener un orden específico. Un conjunto no. Además, los conjuntos solo funcionan en objetos hash .

¿Está preguntando sobre un subconjunto o una subsecuencia (lo que significa que querrá un algoritmo de búsqueda de cadenas)? ¿Alguna de las listas será la misma para muchas pruebas? ¿Cuáles son los tipos de datos contenidos en la lista? Y, de hecho, ¿es necesario que sea una lista?

Su otra publicación intersecta un dictado y una lista aclaró los tipos y recibió una recomendación para usar vistas de claves de diccionario para su funcionalidad de conjunto. En ese caso se sabía que funcionaba porque las claves del diccionario se comportan como un conjunto (tanto es así que antes de que tuviéramos conjuntos en Python usábamos diccionarios). Uno se pregunta cómo el tema se volvió menos específico en tres horas.

Yann Vernier avatar May 16 '2013 04:05 Yann Vernier