Contamos con el hallazgo a este enigma, al menos eso pensamos. Si sigues con preguntas puedes escribirlo en el apartado de preguntas, para nosotros será un gusto responderte
Solución:
Puedes usar conjuntos:
main_list = list(set(list_2) - set(list_1))
Producción:
>>> list_1=["a", "b", "c", "d", "e"]
>>> list_2=["a", "f", "c", "m"]
>>> set(list_2) - set(list_1)
set(['m', 'f'])
>>> list(set(list_2) - set(list_1))
['m', 'f']
Según el comentario de @JonClements, aquí hay una versión más ordenada:
>>> list_1=["a", "b", "c", "d", "e"]
>>> list_2=["a", "f", "c", "m"]
>>> list(set(list_2).difference(list_1))
['m', 'f']
TL;RD:
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)Quieres 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) Puedes usar NumPy 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
ese no son en array2
. assume_unique
es False
por defecto.
Si le preocupa el único elementos (basado en la respuesta de Chinny84), luego simplemente use (donde 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 quieren 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 SECUNDARIAS:
(a) Solución 2 (función personalizada setdiff_sorted
) devuelve un lista (en comparación con un array en la solución 1).
(b) Si no está seguro de si los elementos son únicos, simplemente use la configuración predeterminada de NumPy setdiff1d
en ambas soluciones A y B. ¿Cuál puede ser un ejemplo de una complicación? Ver nota (c).
(c) Las cosas serán diferentes si cualquiera de las dos listas es no único.
Decir list_2
no es único: list2 = ["a", "f", "c", "m", "m"]
. Mantenerse list1
como es: list_1 = ["a", "b", "c", "d", "e"]
Configuración del valor predeterminado de assume_unique
rendimientos ["f", "m"]
(en ambas soluciones). SIN EMBARGO, si configura 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 MANTENER assume_unique
a su valor predeterminado. Tenga en cuenta que ambas respuestas están ordenadas.
pythonnumpy
No estoy seguro de por qué las explicaciones anteriores son tan complicadas cuando tiene métodos nativos disponibles:
main_list = list(set(list_2)-set(list_1))
Aquí puedes ver las reseñas y valoraciones de los usuarios
Si eres capaz, tienes la libertad de dejar una noticia acerca de qué te ha impresionado de esta sección.