proyectos ejemplos python algorithm list set discrete-mathematics

python - ejemplos - Encuentra elementos no comunes en las listas.



django (3)

Estoy tratando de escribir un fragmento de código que puede factorizar automáticamente una expresión. Por ejemplo, si tengo dos listas [1,2,3,4] y [2,3,5], el código debería poder encontrar los elementos comunes en las dos listas, [2,3], y combinar El resto de los elementos juntos en una nueva lista, siendo [1,4,5].

De este post: ¿Cómo encontrar la intersección de la lista? Veo que los elementos comunes se pueden encontrar por

set([1,2,3,4]&set([2,3,5]).

¿Hay una manera fácil de recuperar elementos no comunes de cada lista, en mi ejemplo siendo [1,4] y [5]?

Puedo seguir adelante y hacer un bucle for:

lists = [[1,2,3,4],[2,3,5]] conCommon = [] common = [2,3] for elem in lists: for elem in eachList: if elem not in common: nonCommon += elem

Pero esto parece redundante e ineficiente. ¿Python proporciona alguna función útil que pueda hacer eso? ¡¡Gracias por adelantado!!


Puede utilizar el concepto Intersección para tratar este tipo de problemas.

b1 = [1,2,3,4,5,9,11,15] b2 = [4,5,6,7,8] set(b1).intersection(b2) Out[22]: {4, 5}

Lo mejor de usar este código es que también funciona bastante rápido para datos grandes. Tengo b1 con 607139 y b2 con 296029 elementos cuando uso esta lógica, obtengo mis resultados en 2,9 segundos.


Puede utilizar el método de atributo .__xor__ .

set([1,2,3,4]).__xor__(set([2,3,5]))

o

a = set([1,2,3,4]) b = set([2,3,5]) a.__xor__(b)


Use el operador de diferencia simétrica para los set s (también conocido como el operador XOR):

>>> set([1,2,3]) ^ set([3,4,5]) set([1, 2, 4, 5])