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.

Updated on: 2026-03-27T15:57:53+05:30

492 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements