Por ejemplo, tengo dos listas
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = [6, 9, 12]; # the subset of A
the result should be [7, 8, 10, 11]; the remaining elements
¿Hay una función incorporada en Python para hacer esto?
Si el orden no es importante, debe utilizar set.difference
. Sin embargo, si desea mantener el orden, basta con una simple comprensión de la lista.
result = [a for a in A if a not in subset_of_A]
EDITAR: Como dice delnan, el rendimiento mejorará sustancialmente si subset_of_A
es real set
, ya que la verificación de la pertenencia a a set
es O (1) en comparación con O (n) para una lista.
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = set([6, 9, 12]) # the subset of A
result = [a for a in A if a not in subset_of_A]
subset_of_A
una prueba realset
, que daO(1)
membresía (en lugar deO(n)
como con las listas).Sí, la
filter
función:filter(lambda x: x not in subset_of_A, A)
fuente
filter
devuelve la lista en sí, mientras que en Python 3, devuelve un iterador.list(filter(...))
No, no hay una función incorporada en Python para hacer esto, porque simplemente:
le dará la respuesta.
fuente
set(A)-set(subset_of_A)
le da el conjunto de resultados deseado, pero no conservará el orden original. Lo siguiente es preservar el orden:[a for a in A if not a in subset_of_A]
fuente
tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))
fuente
Qué tal si
fuente
Esto se preguntó hace un par de días (pero no puedo encontrarlo):
>>> A = [6, 7, 8, 9, 10, 11, 12] >>> subset_of_A = set([6, 9, 12]) >>> [i for i in A if i not in subset_of_A] [7, 8, 10, 11]
Podría ser mejor usar
set
s desde el principio, dependiendo del contexto. Luego, puede usar operaciones de configuración como muestran otras respuestas.Sin embargo, convertir listas a conjuntos y viceversa solo para estas operaciones es más lento que la comprensión de listas.
fuente
Utilice el
Set
tipo:A_set = Set([6,7,8,9,10,11,12]) subset_of_A_set = Set([6,9,12]) result = A_set - subset_of_A_set
fuente
>>> a = set([6, 7, 8, 9, 10, 11, 12]) >>> sub_a = set([6, 9, 12]) >>> a - sub_a set([8, 10, 11, 7])
fuente
>>> A = [6, 7, 8, 9, 10, 11, 12] >>> subset_of_A = [6, 9, 12]; >>> set(A) - set(subset_of_A) set([8, 10, 11, 7]) >>>
fuente