Descubrí que hay una pregunta relacionada sobre cómo encontrar si existe al menos un elemento en una lista:
¿Cómo verificar si uno de los siguientes elementos está en una lista?
Pero, ¿cuál es la mejor forma pitónica de averiguar si todos los elementos existen en una lista?
Buscando en los documentos encontré esta solución:
>>> l = ['a', 'b', 'c']
>>> set(['a', 'b']) <= set(l)
True
>>> set(['a', 'x']) <= set(l)
False
Otra solución sería esta:
>>> l = ['a', 'b', 'c']
>>> all(x in l for x in ['a', 'b'])
True
>>> all(x in l for x in ['a', 'x'])
False
Pero aquí debes escribir más.
¿Hay otras soluciones?
set(smaller) <= set(larger)
?Respuestas:
Los operadores como
<=
en Python generalmente no se anulan para significar algo significativamente diferente a "menor o igual a". Es inusual que la biblioteca estándar haga esto; me huele a API heredada.Utilice el método equivalente y más nombrado claramente,
set.issubset
. Tenga en cuenta que no es necesario convertir el argumento en un conjunto; lo hará por usted si es necesario.fuente
<=
y elissubset
significado de lo mismo. ¿Por qué no te gusta?<=
significa para un conjunto sin buscarlo en los documentos o tener un conocimiento previo de lo que significa en la teoría de conjuntos, mientras que todos saben lo queissubset
significa automáticamente.Probablemente lo usaría
set
de la siguiente manera:O de otra forma :
Lo encuentro un poco más legible, pero puede ser demasiado rápido. Los conjuntos son particularmente útiles para calcular la unión / intersección / diferencias entre colecciones, pero puede que no sea la mejor opción en esta situación ...
fuente
MySet.issubset(MyOtherSet)
yMySet <= MyOtherSet
son lo mismo.<=
tenga el significado que tiene para las secuencias: uno podría esperar que signifique 'es una subsecuencia' en lugar de un orden lexicográfico.<=
con secuencias también se siente extraño, de alguna manera ...set(['a','a']).issubset(['a'])
devuelveTrue
.Me gustan estos dos porque parecen los más lógicos, el último es más corto y probablemente el más rápido (se muestra aquí usando una
set
sintaxis literal que se ha actualizado a Python 2.7):fuente
¿Qué pasa si sus listas contienen duplicados como este?
Los conjuntos no contienen duplicados. Entonces, la siguiente línea devuelve True.
Para contar los duplicados, puede usar el código:
Entonces, la siguiente línea devuelve False.
fuente
Esto era lo que estaba buscando en línea, pero desafortunadamente no lo encontré en línea, sino mientras experimentaba con el intérprete de Python.
y si tiene una lista muy larga de variables contenidas en un
sublist variable
fuente
Un ejemplo de cómo hacer esto usando una expresión lambda sería:
fuente
No es el caso de OP, pero, para cualquiera que quiera afirmar la intersección en los dictados y terminó aquí debido a una mala búsqueda en Google (por ejemplo, yo), debe trabajar con
dict.items
:Esto se debe a que
dict.items
devuelve tuplas de pares clave / valor, y al igual que cualquier objeto en Python, son comparables indistintamentefuente