Python - Unique Pairs in List

Finding unique pairs from a list is a common programming task in Python. A unique pair consists of two distinct elements where order doesn't matter for example, (a, b) and (b, a) are considered the same pair. This article explores different methods to generate unique pairs from a Python list.

Method 1: Using Nested Loops

The simplest approach uses nested loops to iterate through all possible combinations ?

def find_unique_pairs(items):
    pairs = []
    for i in range(len(items)):
        for j in range(i + 1, len(items)):
            pairs.append((items[i], items[j]))
    return pairs

# Example
names = ['Jack', 'Sam', 'John', 'Daniel']
result = find_unique_pairs(names)
print(result)
[('Jack', 'Sam'), ('Jack', 'John'), ('Jack', 'Daniel'), ('Sam', 'John'), ('Sam', 'Daniel'), ('John', 'Daniel')]

Method 2: Using itertools.combinations

The itertools.combinations() function provides a more efficient and readable solution ?

from itertools import combinations

def find_unique_pairs(items):
    return list(combinations(items, 2))

# Example
names = ['Jack', 'Sam', 'John', 'Daniel']
result = find_unique_pairs(names)
print(result)
[('Jack', 'Sam'), ('Jack', 'John'), ('Jack', 'Daniel'), ('Sam', 'John'), ('Sam', 'Daniel'), ('John', 'Daniel')]

Method 3: Using List Comprehension

List comprehension offers a concise one-liner approach ?

def find_unique_pairs(items):
    return [(items[i], items[j]) for i in range(len(items)) for j in range(i + 1, len(items))]

# Example
names = ['Jack', 'Sam', 'John', 'Daniel']
result = find_unique_pairs(names)
print(result)
[('Jack', 'Sam'), ('Jack', 'John'), ('Jack', 'Daniel'), ('Sam', 'John'), ('Sam', 'Daniel'), ('John', 'Daniel')]

Handling Duplicate Elements

When the list contains duplicates, we can use sets to ensure truly unique pairs ?

from itertools import combinations

def find_unique_pairs_with_duplicates(items):
    unique_elements = list(set(items))
    return list(combinations(unique_elements, 2))

# Example with duplicates
names = ['Jack', 'Sam', 'John', 'Sam', 'Daniel']
result = find_unique_pairs_with_duplicates(names)
print("Original list:", names)
print("Unique pairs:", result)
Original list: ['Jack', 'Sam', 'John', 'Sam', 'Daniel']
Unique pairs: [('Sam', 'Jack'), ('Sam', 'Daniel'), ('Sam', 'John'), ('Jack', 'Daniel'), ('Jack', 'John'), ('Daniel', 'John')]

Comparison of Methods

Method Readability Performance Best For
Nested Loops Good Slower Learning/understanding
itertools.combinations Excellent Fastest Production code
List Comprehension Good Medium Concise solutions

Conclusion

Use itertools.combinations() for the most efficient and readable solution. For lists with duplicates, combine it with set() to ensure truly unique pairs. List comprehension works well for simple cases where you want a concise one-liner.

Updated on: 2026-03-27T10:43:48+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements