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_unique
pregunta 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 array1
que no están en array2
. assume_unique
es False
por 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 setdiff1d
en 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_2
no es único: list2 = ["a", "f", "c", "m", "m"]
. Mantener list1
como está: list_1 = ["a", "b", "c", "d", "e"]
establecer el valor predeterminado de los assume_unique
rendimientos ["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_unique
a su valor predeterminado. Tenga en cuenta que ambas respuestas están ordenadas.
pitónnumpy
list_2
que no aparecen en ninguna partelist_1
o elementoslist_2
que no están presentes en el mismo índicelist_1
?