Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Python - Unique Tuple Frequency (Order Irrespective)
In this article, we will find the frequency of unique tuples in a list where order doesn't matter. This means tuples like (1,2,3) and (1,3,2) are considered identical since they contain the same elements.
Problem Understanding
Input
data = [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
print("Input:", data)
Input: [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
Expected Output
Frequency of unique tuples = 2
Explanation: Tuples at indices 0, 1, 3, and 4 contain the same elements {1, 2, 3}, making them identical. Tuple at index 2 (4, 5, 6) is unique. Therefore, we have 2 unique tuples.
Using Set with Sorted Tuples
Sort each tuple to normalize order, then use a set to eliminate duplicates ?
data = [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
unique_tuples_set = set(tuple(sorted(item)) for item in data)
print("Input List:", data)
print("Frequency of unique tuples =", len(unique_tuples_set))
Input List: [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)] Frequency of unique tuples = 2
Using Dictionary Comprehension
Create a dictionary where sorted tuples are keys, eliminating duplicates automatically ?
data = [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
unique_tuples_dict = {tuple(sorted(item)): item for item in data}
print("Input List:", data)
print("Frequency of unique tuples =", len(unique_tuples_dict))
Input List: [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)] Frequency of unique tuples = 2
Using Frozenset for Order-Independent Comparison
Convert tuples to frozensets, which are inherently order-independent ?
data = [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
unique_tuples_set = {frozenset(item) for item in data}
print("Input List:", data)
print("Frequency of unique tuples =", len(unique_tuples_set))
Input List: [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)] Frequency of unique tuples = 2
Using collections.Counter
Count occurrences of sorted tuples using Counter ?
from collections import Counter
data = [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
unique_tuples_counter = Counter(tuple(sorted(item)) for item in data)
print("Input List:", data)
print("Frequency of unique tuples =", len(unique_tuples_counter))
print("Detailed counts:", dict(unique_tuples_counter))
Input List: [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
Frequency of unique tuples = 2
Detailed counts: {(1, 2, 3): 4, (4, 5, 6): 1}
Using Manual Loop
Iterate through the list and manually track unique sorted tuples ?
data = [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)]
unique_tuples = set()
for item in data:
sorted_tuple = tuple(sorted(item))
unique_tuples.add(sorted_tuple)
print("Input List:", data)
print("Frequency of unique tuples =", len(unique_tuples))
Input List: [(1, 2, 3), (2, 1, 3), (4, 5, 6), (1, 2, 3), (3, 2, 1)] Frequency of unique tuples = 2
Comparison
| Method | Time Complexity | Space Complexity | Best For |
|---|---|---|---|
| Set with sorted tuples | O(n × k log k) | O(n) | General use |
| Dictionary comprehension | O(n × k log k) | O(n) | When you need original tuples |
| Frozenset | O(n × k) | O(n) | No sorting needed |
| Counter | O(n × k log k) | O(n) | When you need frequency counts |
where n = number of tuples, k = average tuple length
Conclusion
The frozenset approach is most efficient for order-independent comparison, while Counter provides detailed frequency information. Use set comprehension with sorted tuples for the most readable general-purpose solution.
