Open In App

Python – Symmetric Difference of Multiple sets

Last Updated : 04 Mar, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

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




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


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




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


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}



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads