Python: diferencia simétrica de conjuntos múltiples

Las diferencias simétricas entre grupos de conjuntos son elementos que pertenecen a cualquiera de los conjuntos pero que no están presentes en ningún otro conjunto. Dada una lista de conjuntos, la tarea es escribir un programa en Python para obtener la diferencia simétrica de los mismos. 

Entrada: lista_prueba = [{5, 3, 2, 6, 1}, {7, 5, 3, 8, 2}, {9, 3}, {0, 3, 6, 7}]

Salida: {8, 1, 9, 0}

Explicación: 8, 1, 9, 0 ocurren solo 1 vez en todo el contenedor. 

Entrada: lista_prueba = [{5, 3, 2, 6, 1}, {7, 5, 3, 8, 2}, {9, 3}]

Salida: {8, 1, 9}

Explicación: 8, 1, 9 ocurren solo 1 vez en todo el contenedor. 

Método #1: Usando Counter() + chain.from_iterable() 

Este método se utiliza para verificar todos los elementos que tienen 1 como conjuntos de frecuencia general mediante aplanamiento. Counter() extrae frecuencias y luego se pueden extraer todos los elementos con recuento 1. 

Python3

# Python3 code to demonstrate working of
# Symmetric Difference of Multiple sets
# Using Counter() + chain.from_iterable() 
from collections import Counter
from itertools import chain
  
# initializing list
test_list = [{5, 3, 2, 6, 1},
             {7, 5, 3, 8, 2}, 
             {9, 3},
             {0, 3, 6, 7}]
               
# printing original list
print("The original list is : " + str(test_list))
  
# getting frequencies using Counter()
# from_iterable() flattens the list 
freq = Counter(chain.from_iterable(test_list))
  
# getting frequency count 1 
res = {idx for idx in freq if freq[idx] == 1}
  
# printing result
print("Symmetric difference of multiple list : " + str(res))

Producción:

La lista original es: [{1, 2, 3, 5, 6}, {2, 3, 5, 7, 8}, {9, 3}, {0, 3, 6, 7}]

Diferencia simétrica de lista múltiple: {8, 1, 9, 0}

Método #2: Usando Counter() + chain.from_iterable() + items()

Similar al método anterior, la única diferencia es que se realiza en un solo paso al extraer claves y valores usando elements().

Python3

# Python3 code to demonstrate working of
# Symmetric Difference of Multiple sets
# Using Counter() + chain.from_iterable() + items()
from collections import Counter
from itertools import chain
  
# initializing list
test_list = [{5, 3, 2, 6, 1},
             {7, 5, 3, 8, 2}, 
             {9, 3}, {0, 3, 6, 7}]
               
# printing original list
print("The original list is : " + str(test_list))
  
# clubbing operations using items() to get items 
res = {key for key, val in Counter(chain.
                                   from_iterable(test_list)).
       items() if val == 1}
  
# printing result
print("Symmetric difference of multiple list : " + str(res))

Producción:

La lista original es: [{1, 2, 3, 5, 6}, {2, 3, 5, 7, 8}, {9, 3}, {0, 3, 6, 7}]

Diferencia simétrica de lista múltiple: {8, 1, 9, 0}

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *