TL; DR:
SOLUCIÓN (1)
import numpy as np
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
SOLUCIÓN (2) Quiere una lista ordenada
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
main_list = setdiff_sorted(list_2,list_1)
EXPLICACIONES:
(1) Se puede utilizar NumPy de setdiff1d( array1, array2, assume_unique= False).
assume_uniquepregunta al usuario si las matrices YA SON ÚNICAS.
Si False, entonces los elementos únicos se determinan primero.
Si True, la función asumirá que los elementos ya son únicos Y la función omitirá la determinación de los elementos únicos.
Esto produce los valores únicos en array1que no están en array2. assume_uniquees Falsepor defecto
Si le preocupan los elementos únicos (basados en la respuesta de Chinny84 ), simplemente use (where assume_unique=False=> el valor predeterminado):
import numpy as np
list_1 = ["a", "b", "c", "d", "e"]
list_2 = ["a", "f", "c", "m"]
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
(2)
Para aquellos que desean ordenar las respuestas, he creado una función personalizada:
import numpy as np
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
Para obtener la respuesta, ejecute:
main_list = setdiff_sorted(list_2,list_1)
NOTAS LATERALES:
(a) La solución 2 (función personalizada setdiff_sorted) devuelve una lista (en comparación con una matriz en la solución 1).
(b) Si no está seguro de si los elementos son únicos, simplemente use la configuración predeterminada de NumPy's setdiff1den las soluciones A y B. ¿Qué puede ser un ejemplo de complicación? Ver nota (c).
(c) Las cosas serán diferentes si cualquiera de las dos listas no es única.
Por ejemplo list_2no es único: list2 = ["a", "f", "c", "m", "m"]. Mantener list1como está: list_1 = ["a", "b", "c", "d", "e"]
establecer el valor predeterminado de los assume_uniquerendimientos ["f", "m"](en ambas soluciones). SIN EMBARGO, si establece assume_unique=True, ambas soluciones dan ["f", "m", "m"]. ¿Por qué? Esto se debe a que el usuario asumió que los elementos son únicos). Por lo tanto, es mejor mantenerassume_uniquea su valor predeterminado. Tenga en cuenta que ambas respuestas están ordenadas.
pitónnumpy
list_2que no aparecen en ninguna partelist_1o elementoslist_2que no están presentes en el mismo índicelist_1?