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_Aes real set, ya que la verificación de la pertenencia a a setes 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_Auna prueba realset, que daO(1)membresía (en lugar deO(n)como con las listas).Sí, la
filterfunción:filter(lambda x: x not in subset_of_A, A)fuente
filterdevuelve 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
sets 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
Settipo:A_set = Set([6,7,8,9,10,11,12]) subset_of_A_set = Set([6,9,12]) result = A_set - subset_of_A_setfuente
>>> 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