Python – Symmetric Difference of Multiple sets
Last Updated :
04 Mar, 2024
Symmetric Differences among groups of sets are elements that belong to any one of the sets but are not present in any other set. Given a list of sets and the task is to write a Python program to get the symmetric difference of the same.
Input : test_list = [{5, 3, 2, 6, 1}, {7, 5, 3, 8, 2}, {9, 3}, {0, 3, 6, 7}]
Output : {8, 1, 9, 0}
Explanation : 8, 1, 9, 0 occur just 1 time over whole container.
Input : test_list = [{5, 3, 2, 6, 1}, {7, 5, 3, 8, 2}, {9, 3}]
Output : {8, 1, 9}
Explanation : 8, 1, 9 occur just 1 time over whole container.
Method #1: Using Counter() + chain.from_iterable()
This method is used to check for all elements that have 1 as frequency overall sets by flattening. Counter() extracts frequencies and then all elements with count 1 can be extracted.
Python3
from collections import Counter
from itertools import chain
test_list = [{ 5 , 3 , 2 , 6 , 1 },
{ 7 , 5 , 3 , 8 , 2 },
{ 9 , 3 },
{ 0 , 3 , 6 , 7 }]
print ( "The original list is : " + str (test_list))
freq = Counter(chain.from_iterable(test_list))
res = {idx for idx in freq if freq[idx] = = 1 }
print ( "Symmetric difference of multiple list : " + str (res))
|
Output:
The original list is : [{1, 2, 3, 5, 6}, {2, 3, 5, 7, 8}, {9, 3}, {0, 3, 6, 7}]
Symmetric difference of multiple list : {8, 1, 9, 0}
Method #2 : Using Counter() + chain.from_iterable() + items()
Similar to above method, only difference being its performed in single step by extracting keys and values using items().
Python3
from collections import Counter
from itertools import chain
test_list = [{ 5 , 3 , 2 , 6 , 1 },
{ 7 , 5 , 3 , 8 , 2 },
{ 9 , 3 }, { 0 , 3 , 6 , 7 }]
print ( "The original list is : " + str (test_list))
res = {key for key, val in Counter(chain.
from_iterable(test_list)).
items() if val = = 1 }
print ( "Symmetric difference of multiple list : " + str (res))
|
Output:
The original list is : [{1, 2, 3, 5, 6}, {2, 3, 5, 7, 8}, {9, 3}, {0, 3, 6, 7}]
Symmetric difference of multiple list : {8, 1, 9, 0}
Please Login to comment...