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])