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
# 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}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4