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 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.
