Skip to content
Related Articles

Related Articles

Python | Find all distinct pairs with difference equal to k

View Discussion
Improve Article
Save Article
  • Last Updated : 25 Nov, 2019

Given a list of integers and a positive integer k, write a Python program to count all distinct pairs with difference equal to k.

Examples:

Input : [1, 5, 3, 4, 2], k = 3
Output : [(5, 2), (4, 1)]

Input : [8, 12, 16, 4, 0, 20], k = 4
Output : [(8, 4), (12, 8), (16, 12), (4, 0), (20, 16)]

 
Approach #1 : Python list comprehension

We will use list comprehension using two loops using ‘e1’ and ‘e2’ that will traverse given list. We check if e1-e2 == k or not and return the (e1, e2) tuple respectively. Finally, a list with required tuples will be returned.




# Python3 program to Find all distinct 
# pairs with difference equal to k
  
def findPairs(lst, k):
      
    return [(e1, e2) for e1 in lst 
            for e2 in lst if (e1-e2 == k)]
          
# Driver code
lst = [1, 5, 3, 4, 2]
k = 3
print(findPairs(lst, k))

Output:

[(5, 2), (4, 1)]

 
Approach #2 :

This is an efficient approach with respect to the above approach as it uses only O(n) space. We take an empty list to store the output. Then, we use a loop with iterator ‘e’ to traverse through given list. In every iteration, we check is e+k i.e the required pair integer for e is available or not. If yes, we append the tuple to ‘res’.




# Python3 program to Find all distinct 
# pairs with difference equal to k
  
def findPairs(lst, k):
    res = []
    for e in lst:
        if e + k in lst:
            res.append(tuple((e, e + k)))
              
    return res
      
# Driver code
lst = [1, 5, 3, 4, 2]
k = 3
print(findPairs(lst, k))

Output:

[(1, 4), (2, 5)]

 

Approach #3 : combinations() from itertools module

The best approach is to use the inbuilt function from itertools module. combinations() produces an iterator over tuples of all combinations of n elements in inputs. We make the use of these combinations and output those having ‘k’ difference.




# Python3 program to Find all distinct 
# pairs with difference equal to k
from itertools import combinations
  
def findPairs(lst, k):
    return [(x, y) for x, y in combinations(lst, r = 2)
                   if abs(x - y) == k]
              
# Driver code
lst = [1, 5, 3, 4, 2]
k = 3
print(findPairs(lst, k))

Output:

[(1, 4), (5, 2)]

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!